2015-12-18 7 views
12

C++メモリ割り当て演算子の形式はoperator new (size_t s)です。 new演算子にTタイプのクラスオブジェクトをオーバーロードすると、演算子newの入力引数(つまり、size_t s)が正確にsizeof(T)であることが保証されますか?はいの場合、この関数は引き続きサイズを入力引数として必要としますか?オーバーロード時のサイズ情報C++ new演算子

+0

これは私のフィールドではありませんが、[this](http://en.cppreference.com/w/cpp/memory/new/operator_new)が役立ちます。 – hargasinski

答えて

13

基本クラスの演算子newをオーバーライドして派生クラス型のオブジェクトを割り当てることができます。

struct Base 
{ 
    void* operator new (size_t s) { ... } 
    int a; 
}; 

struct Derived : public Base 
{ 
    int b; 
}; 

Derived* d = new Derived; 

Derivedためのメモリを割り当て、Base::operator new(size_t)が使用されます。引き数の値はsizeof(Derived)になります。その引数がなければ、タイプDerivedのオブジェクトに適切な量のメモリを割り当てることができません。

関連する問題