我正在尝试纠正“库”中的内存泄漏,但不确定如何解决。
我应该使用 C++11 的 unique_ptr 吗?shared_ptr? 弱点?
Foo& bar() {
Foo* ptr = some_pointer;
ptr = new Foo();
return *ptr;
}
我已经查看了它们之间的差异,但仍然不确定我应该使用哪个,或者我是否应该使用它们。整个库使用原始指针,但自身很少进行清理。
有什么建议吗?
我正在尝试纠正“库”中的内存泄漏,但不确定如何解决。
我应该使用 C++11 的 unique_ptr 吗?shared_ptr? 弱点?
Foo& bar() {
Foo* ptr = some_pointer;
ptr = new Foo();
return *ptr;
}
我已经查看了它们之间的差异,但仍然不确定我应该使用哪个,或者我是否应该使用它们。整个库使用原始指针,但自身很少进行清理。
有什么建议吗?
仅仅用智能指针替换原始指针通常不会解决任何问题。您必须设计软件以有效地使用它们。在我看来,这个库根本就不是设计的,这意味着除了完全重写它之外,可能没有办法让它正常工作。
如果库对象本身不包含指针,并且成员函数从不返回 a this
(或者对于那些这样做的函数,例如operator=
,则从不使用返回值。你可以std::shared_ptr
试一试,如果满足足够的限制,我可以工作。其他的可能不会,至少一般不会。几乎可以肯定在某些情况下
unique_ptr
会更合适。但shared_ptr
在这种情况下也可以使用。而且你不能在没有weak_ptr
开始shared_ptr
的情况下使用,