0

最適なアルゴリズムのコードがあります。演算子 new を使用して最適なアルゴリズムを使用したいと考えています。

オブジェクトを作成するたびに、既に割り当てられているメモリからそれを与える必要があります。

1]20 2]12 3]15 4]6 5]23 それぞれ。オブジェクトのサイズに適合する最小量 (例: 21)

さまざまなオブジェクト タイプに対して実行したかったので、オーバーロードされた演算子 new を記述して、すべてのクラス オブジェクトに共通の機能にする必要があります。

フレンド機能でできますか、それともできる方法はありますか。

4

1 に答える 1

1

プログラム内のすべての型に対して演算子 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 );
};

次に、そのオーバーロードされた演算子を使用して、そのクラスのインスタンスを作成します。

于 2013-10-21T04:34:28.273 に答える