在 C++ 函数中使用后删除对象

Delete object after using it in function C++

我对 C++ 中的 deletememory 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 语义通过作用域处理内存清理。