在 C++ 函数中使用后删除对象
Delete object after using it in function C++
我对 C++ 中的 delete 和 memory leak 有疑问。考虑以下代码:
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() 中的指针 ???
// 我读了一些建议,要求更改函数,不要在函数中创建带有单词 new 的对象。但是是否存在删除该指针的方法?
您可以通过删除 AnObject::Foo
中的 this
来实现,但我强烈建议您不要这样做。在这种情况下,您根本不需要指针:
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 语义通过作用域处理内存清理。
我对 C++ 中的 delete 和 memory leak 有疑问。考虑以下代码:
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() 中的指针 ???
// 我读了一些建议,要求更改函数,不要在函数中创建带有单词 new 的对象。但是是否存在删除该指针的方法?
您可以通过删除 AnObject::Foo
中的 this
来实现,但我强烈建议您不要这样做。在这种情况下,您根本不需要指针:
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 语义通过作用域处理内存清理。