30 c++ new-operator delete-operator c++11
为什么C++没有直接对应于贴图新的贴片删除,即调用析构函数并调用适当的贴片删除操作符?
例如:
MyType *p = new(arena) MyType;
...
//current technique
p->~MyType();
operator delete(p, arena);
//proposed technique
delete(arena) p;
Run Code Online (Sandbox Code Playgroud)
Pot*_*ter 22
operator delete
作为动态调度的非成员或静态成员函数是唯一的.具有虚析构函数的类型delete
从最派生的析构函数执行对其自己的调用.
struct abc {
virtual ~abc() = 0;
};
struct d : abc {
operator delete() { std::cout << "goodbye\n"; }
};
int main() {
abc *p = new d;
delete p;
}
Run Code Online (Sandbox Code Playgroud)
(运行此示例.)
为了使用放置删除,析构函数必须以某种方式将附加参数传递给operator delete
.
operator delete
具有不同参数的全局重载使用单独的虚拟析构函数.operator delete
应该调用的内容.但是如果析构函数执行查找,则会遇到需要多个虚函数定义为#1的相同问题.必须创建某种抽象重载集,调用者将解析它.你有一个非常好的观点,它将成为语言的一个很好的补充.delete
理论上,甚至可能将其改造成现有的语义.但是大多数时候我们不使用完整的功能,delete
只需使用伪析构函数调用就可以了arena.release(p)
.
use*_*016 20
因为我们已经拥有,所以没有必要 ptr->~type();
可能是因为有没有解除分配显式调用析构函数的语法(与您的问题完全相同),但原始内存中没有显式构造的语法?
归档时间: |
|
查看次数: |
10677 次 |
最近记录: |