我知道无法通过调用“delete”运算符来调用带有放置参数的delete运算符。
例如,下面的示例无法编译:
class C {
public:
...
void *operator new(unsigned int s, MyAllocator& a) { return a.allocate(s); }
void operator delete(void *p, MyAllocator& a) { a.free(p); }
};
...
MyAllocator a;
C *p = new(a) C;
...
delete (a) p; // compilation error
我也知道要实现的好方法是:
p->~C();
a.free(p);
但我的问题不是语法或用C ++编写代码的方法,而是关于阻止在删除操作符调用中使用放置参数的原因(虽然允许使用新的)。