One*_*ble 0 c++ pointers memory-leaks ownership-semantics
例如,
class Test{
private:
int* foo;
public:
Test(int* foo){this->foo = foo;}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,有什么办法可以在析构函数中删除 foo 吗?我是否必须在析构函数中删除 foo 或者至少将其设置为 nullptr?
你当然可以。这是合法的语法。根据程序的其余部分,它可能会执行您想要的操作,也可能是双重删除(删除同一指针两次),这会损坏堆并导致最终崩溃。(调试编译器可能会发现这一点。)
\nC++ 标准模板库给我们带来的原因之一shared_ptr是unique_ptr手动内存管理很困难。这并非不可能;人们这样做(或试图这样做)很多很多年了。但它也是许多运行时灾难的根源,要么是双重删除(也称为从旧的 malloc/free 例程中过早释放),要么是相反的内存泄漏。自动内存管理是 Java\xe2\x80\x99 作为 C/C++ 类似语言且没有内存错误风险的卖点之一。后来 C# 也向用户做了同样的宣传。
我建议使用 STL 并考虑 foo.txt 的所有权语义。也许测试类应该拥有它;也许它应该分享它;也许它确实应该有一个弱引用。无法从程序片段中看出。我只能说你应该回顾一下 C++ 中内存管理的现代思想并采用它们。
\n