我是C ++世界的新手...
我对C ++中的析构函数有疑问。
如果有类似的课程:
class TestClass {
public:
double *array;
}
当我将一个数组的指针放置到
*array
并再次放置另一个指针并删除Testclass实例时,那么我不能再访问较旧的指针了吗?变成错误:
int main() {
TestClass tc;
tc.array = new double[10];
double *array2 = tc.array;
tc.array[3]=9;
tc.array = new double[10];
delete &tc; // <------------------- this one.
std::cout<<array2[3]<<std::endl;
// std::cout<<tc.array[3]<<array2[3]<<std::endl;
}
如果没有
delete &tc
并激活注释行(最后一行),显示'09'((tc.array [3]!= array2 [3] => tc.array!= array2)
这并不意味着tc.arrray不是* array2中的那个?
怎么了?
最佳答案
tc
是函数范围的变量(分配在堆栈上)。它没有分配new
。您无法删除它。函数返回时将自动释放它
关于c++ - Denstructor删除已替换的成员?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58916927/