プログラム内のすべての型に対して演算子 new を使用する場合は、単純にグローバル演算子 new をオーバーライドします。
void* operator new ( std::size_t count );
void* operator new[]( std::size_t count );
void* operator new ( std::size_t count, const std::nothrow_t& );
void* operator new[]( std::size_t count, const std::nothrow_t& );
特定のクラスに対してのみ実行したい場合は、次の 2 つの可能性があります。
配置演算子 new を使用:
void* operator new ( std::size_t, void* ptr );
void* operator new[]( std::size_t, void* ptr );
その型で明示的に使用する必要があります。または、ファクトリまたはファクトリ メソッドを使用して、ヒープ上にそのクラスのインスタンスを作成し、その実装を内部に隠すことができます。
静的メソッドとして使用して、クラスの new 演算子をオーバーライドできます。
class FooBar {
public:
static void* operator new ( std::size_t count );
static void* operator new[]( std::size_t count );
};
次に、そのオーバーロードされた演算子を使用して、そのクラスのインスタンスを作成します。