Nik*_*ntz 5 c++ delete-operator
可能重复:
C++:删除这个?
面向对象的自杀或删除此;
我正在通过阅读非常好的C++ Primer来学习C++,并且我正在学习C++如何通过delete像C这样的关键字释放内存free.Java和Pascal没有这种用于释放内存的机制.如果程序运行很长时间并且变量被破坏,那么它可能会导致程序错误,因此不应该忽略它.
简而言之,我想知道它是合法的还是可以推荐的,例如在C++中变量可以做this.delete()和删除自己.我们大多听说过在C和C++中释放指针,这是用新的free和delete关键字完成的.Pascal也有指针,但Java没有.所以在Java中它不应该是可能的,因为你没有明确删除对象,C没有对象,因此一个struct不能free为它分配即使因为C没有对象也不是技术上是可行的内存确实帕斯卡.
因此,我认为离开C++是为了我的问题,对象是否合法删除自己的类似的东西this.delete()?
对象完全可以做到delete this;.
但是,执行此操作后,使用this是一种未定义的行为.
所以,如果你非常小心,事后做了,对于一个"自杀"的对象是好的和合法的 delete this;
但是,这真的不是一个好主意,特别是因为它意味着你的类只应该由new实例化,因为te栈上的分配可能导致析构函数被调用两次:删除它,以及离开上下文时.
以下示例说明了为什么它不是一个好主意:
class A
{
public:
~A() { std::cout << "Destructor"; }
void foo() { delete this; }
};
int main()
{
{
A a;
a.foo(); // OK, a is deleted
} // Going out of context, the destructor is called again => undefined behavior
return 0;
}
Run Code Online (Sandbox Code Playgroud)
this 是一个指针.正确的语法是
delete this;
Run Code Online (Sandbox Code Playgroud)
是的,这是可能的,但它会使您的对象和指向您的对象的指针无法使用.
看到这个是为了一个好的阅读.
在实践中,使用这种技术是一种代码味道,除非你完全确定你在做什么.
| 归档时间: |
|
| 查看次数: |
1592 次 |
| 最近记录: |