我有一个关于在C++中删除和内存泄漏的问题。考虑以下代码:
class AnObject{
public:
AnObject* Foo(){
// how can I delete this object ???
AnObject* obj = new AnObject();
...
return obj;
}
};
int main(){
...
AnObject* x = new AnObject();
AnObject* result = x->Foo();
delete x;
return 0;
}
我的问题是如何删除函数AnObject::Foo()中的指针?
//我读了一些需要更改功能的建议,不要用新这个词来创建对象。但是,是否存在删除此指针的方法?
最佳答案
您可以通过删除this
中的AnObject::Foo
来做到这一点,但我强烈建议您不要这样做。在这种情况下,您根本不需要指针:
class AnObject{
public:
AnObject Foo(){
return AnObject{};
}
};
int main()
{
AnObject x{};
AnObject result = x.Foo();
return 0;
}
如果出于任何原因您确实确实需要指针,请考虑使用智能指针
#include <memory>
class AnObject{
public:
std::unique_ptr<AnObject> Foo(){
return std::make_unique<AnObject>();
}
};
int main()
{
std::unique_ptr<AnObject> x = std::make_unique<AnObject>();
std::unique_ptr<AnObject> result = x->Foo();
return 0;
}
在这两种情况下,您都不需要使用
delete
进行编码,因为您正在使用RAII语义通过作用域处理内存清理。