我有一个使用 placement new 分配的对象.当不再需要该对象时,我明确地使用它的析构函数,然后自己处理内存,如网络上各种来源所述。
然而,我不清楚编译器是否可以为析构函数调用生成任何额外的“后台魔法”,而不仅仅是为析构函数内部的内容生成指令。实际的问题是:在“placement-new”的情况下,有什么能阻止我使用“自定义析构函数”而不是常规(~语法)析构函数吗?简单的类方法,包含所有常用的析构函数代码,但可能另外带有参数。
下面是一个例子:
class FooBar {
FooBar() { ... }
...
void myCustomDestructor(int withArguments) { ... }
...
};
int main() {
...
FooBar* obj = new (someAddress) FooBar();
...
obj->~FooBar(); // <- You're supposed to do this.
obj->myCustomDestructor(5); // <- But can you do this instead?
...
// Then do whatever with the memory at someAddress...
}
自定义析构函数有什么缺点吗?
最佳答案
虽然这在技术上是可行的,但我建议不要这样做。
析构函数的存在是有原因的:编译器负责调用所有基类的析构函数。如果您使用自定义析构函数,则需要自己处理(并且很可能会在某处忘记它)。
此外,使用与默认析构函数不同的方法对于任何阅读您代码的人来说都是显而易见的。
您期望使用自定义析构函数有什么好处?我没看到。
关于c++ - 带有 Placement New 的自定义析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14844628/