3

我正在尝试纠正“库”中的内存泄漏,但不确定如何解决。

我应该使用 C++11 的 unique_ptr 吗?shared_ptr? 弱点?

Foo& bar() {
    Foo* ptr = some_pointer;
    ptr = new Foo();
    return *ptr;
}

我已经查看了它们之间的差异,但仍然不确定我应该使用哪个,或者我是否应该使用它们。整个库使用原始指针,但自身很少进行清理。

有什么建议吗?

4

1 回答 1

3

仅仅用智能指针替换原始指针通常不会解决任何问题。您必须设计软件以有效地使用它们。在我看来,这个库根本就不是设计的,这意味着除了完全重写它之外,可能没有办法让它正常工作。

如果库对象本身不包含指针,并且成员函数从不返回 a this(或者对于那些这样做的函数,例如operator=,则从不使用返回值。你可以std::shared_ptr试一试,如果满足足够的限制,我可以工作。其他的可能不会,至少一般不会。几乎可以肯定在某些情况下 unique_ptr会更合适。但shared_ptr在这种情况下也可以使用。而且你不能在没有weak_ptr 开始shared_ptr的情况下使用,

于 2013-07-14T14:44:05.180 回答