【发布时间】:2018-01-09 19:36:51
【问题描述】:
为了检查这一点,我运行了这个小测试代码。
#include <iostream>
using namespace std;
class name {
public:
int data;
name(int data) {
this->data = data;
}
void printData() {
cout << data << endl;
}
};
int main() {
name* namePointer;
{
name n(5);
namePointer = &n;
}
namePointer->printData();
}
那么,两个问题:
name对象n在main内部的块中创建并保存其指针,以确保在我们离开块时调用其析构函数。但是指针指向同一个对象,并且它的成员函数仍然可以访问。这不是说对象还没有被删除吗?-
假设我将其添加到我的
name课程中:~name() { cout << "destructor called" << endl; }重写析构函数并在其中不做任何事情(此处为
~name())是否会阻止对象被删除?
编辑:感谢您的回复,这真的很有帮助。但是我想知道这些反对票的原因吗,我认为这是一个非常好的问题。 ¯_(ツ)_/¯
【问题讨论】:
-
不要将“价值”与“记忆”混为一谈。析构函数调用(应该)只会使对象的值无效。
-
析构函数only 销毁并清理对象。它不会释放内存。这是由析构函数之外的单独机制管理的。
-
我推荐阅读这个:isocpp.org/wiki/faq/dtors
-
@matrixisreal 您永远不会在堆上分配任何内存,并且您引用超出范围的堆栈变量,该变量的内存被清理然后与您的析构函数完全分离
-
我不同意重复。他们谈论在对象被删除后访问对象,但问题是“析构函数只是释放内存还是实际删除对象”。提供的重复不回答这个问题。
标签: c++ pointers memory-management destructor