我很喜欢在 C++ 中使用运算符 new
和 delete
,但稍后在程序代码中调用 delete
时经常会遇到问题。
例如,在以下代码中:
class Foo {
public:
string *ace;
Foo();
~Foo();
};
Foo::Foo() {
ace = new string;
}
Foo::~Foo() {
delete ace;
}
void UI::ButtonPressed() { //Happens when an event is triggered
Foo *foo = new Foo;
ui->label = ace; //Set some text on the GUI
delete foo; //Calls the destructor, deleting "ace" and removing it from the GUI window
}
我可以声明一个新
字符串,但是当我删除
它时,它会从 GUI 表单中删除该值,因为该字符串现已被删除。
有没有办法让我稍后以某种方式删除这个分配的字符串?
我不想将其声明为全局变量,然后在程序源代码的最后一行删除
它。我永远不能调用delete
,但据我所知,这是不好的,会导致内存泄漏。
最佳答案
您应该阅读 RAII pattern 。这是 C++ 程序员需要了解的最重要的概念之一。
基本思想是资源(新对象、HTTP 连接等)的生命周期与对象的生命周期相关。这是编写异常安全代码所必需的。
在您的情况下,UI 小部件将复制该对象并在其自己的析构函数中释放它。然后,调用代码可以立即释放其拷贝(在另一个析构函数中)。
关于c++ - 处理类 new 和删除运算符 C++ 中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9247225/