C++ 中的 AFAIK(或至少在我的编译器中:gcc 和 clang)允许使用以下代码:
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)类似的方式不适用于“删除”运算符。IE:
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;
}
在“删除”行上给出一个硬错误。
有没有办法(可能是编译器开关)允许对
BLA::operator delete(bla, 3, 5) 进行这种非标准隐式调用?
使用上面的行真的会破坏好的语法:(