C ++(または少なくとも私のコンパイラ:gccとclang)でのAFAIKでは、次のコードが許可されています。
struct BLA { void *operator new( std::size_t size, int i1, int i2 ); };
int main( void )
{
struct BLA *bla = new (3,5) BLA;
return 0;
}
IMAOこれは、ストレージを割り当てる非常にクリーンな構文を可能にするため、非常に優れています。
この手法を使用すると、オブジェクトを非常にクリーンな方法で割り当てる方法に起因する変数を渡すことができ、コンストラクターを悪用する必要がなくなります。
残念ながら、C ++標準では(AFAIK)、「削除」演算子では同様の方法は機能しないとされています。すなわち:
struct BLA
{
void *operator new( std::size_t size, int i1, int i2 );
void operator delete( void *p, int i1, int i2 );
};
int main( void )
{
struct BLA *bla = new (3,5) BLA;
delete (3,5) bla;
return 0;
}
'delete'行にハードエラーが発生します。
BLA :: operator delete(bla、3、5
)へのこの非標準の暗黙の呼び出しを許可する方法(おそらくコンパイラスイッチ)はありますか?
上記の行を使用すると、素晴らしい構文が本当に破壊されます:(