The factory object function is one of the possible solutions, but it makes it difficult and time-consuming to define derived classes: while simple, very very intrusive.
, - :
#define MYNEW( Type, args ) myFunction( new Type args )
myFunction arg. :
MyClass* myClassPointer = MYNEW( Type,( blah, blah, blah ) );
, , .
- , , new , MYNEW. , , new, , . ( " ", , "" ).
:
#include <stddef.h>
template< class Type >
Type* myFunction( Type* p ) { return p; }
enum NewCallObfuscation {};
#define MY_NEW( Type, args ) \
myFunction( new((NewCallObfuscation*)0) Type args )
struct MyClass
{
void* operator new( size_t size, NewCallObfuscation* )
{
return ::operator new( size );
}
MyClass( int, int, int ) {}
};
int main()
{
MyClass* p = MY_NEW( MyClass,( 1, 2, 3 ) );
}
, , new, . , , , . ., .
hth.,