c++ - Denstructor 删除一个已经被替换的成员?

标签 c++ pointers

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

相关文章:

c++ - 函数指针指向成员函数

c - 访问全局数组会导致段错误

Swift UnsafeMutableRawPointer 返回类而不是实例

c++ - 在同一指令中引用和取消引用

C++ 显示 OSX 权限对话框

c++ - 未知类型名称错误Qt C++

c++ - 仅静态常量成员不同的两个子类

c++ - 执行 remove_if() 后删除()

c++ - 此代码 O(R*C) 的最坏时间情况如何?

c - 为什么我在 C 代码中使用 x->y = z 而不是 x.y = z?