【发布时间】:2018-10-02 23:11:08
【问题描述】:
我不明白删除对象和将指针设置为 null 的工作原理。
例如:
Class* c = new Class();
我们可以将指针设置为空
c=null;
在这种情况下,对象仍在内存中,没有任何东西指向它。我们要如何删除它?
或
delete c;
在这种情况下,我们删除了一个对象,但指针仍然指向前一个对象的地址位置。在哪些情况下可能有用?
【问题讨论】:
-
这就是为什么你必须
delete c然后将 c 设置为 null... -
如果您没有
delete对象,并且不再有任何指向它的指针或引用,那么您不能 删除它。这就是所谓的泄漏。不要那样做。delete破坏对象并释放与之相关的内存,这就是它指定要做的所有事情。 -
如果我们只是设置为null,那是最糟糕的编程习惯吗?因为对象会在内存中的某个地方徘徊而几乎无法访问?
-
如果你应该将对象的销毁和指向它的指针设置配对,这取决于你的代码、你的用例和你的设计。在大多数情况下,它是不需要的,分配是无用的操作。
-
您应该做的始终是将每个
new与delete配对,并将每个new[]与delete[]配对。然而,现在对简单指针的需求变得越来越少,除了多态性(虚拟函数、抽象接口类等)。对于类似资源的对象,使用std::unique_ptr或std::shared_ptr。对于动态数组,请使用std::vector。
标签: c++