我是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/

10-12 20:33