我的代码是否有返回std::shared_ptr vector 的内存泄漏风险?我认为这是安全的,因为在主函数结束之前引用计数不会为零。我对吗?
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
class A {
public:
A(int v):a(v){}
int a;
};
typedef std::shared_ptr<A> APtr;
vector<APtr> test() {
APtr x(new A(1));
APtr y(new A(2));
APtr z(new A(3));
APtr a(new A(4));
return vector<APtr>({x, y, z, a});
}
int main()
{
cout << "Hello World" << endl;
vector<APtr> b = test();
for(auto k : b) {
cout << k->a << "\n";
}
return 0;
}
最佳答案
是的,这是安全且无内存泄漏的。您的test
函数创建了指针,它们的引用计数均为1。函数返回后,将它们复制到b
中,这会增加引用计数,然后超出范围并将引用计数减小至1。A
都在main
末尾正确清除。
在cout
中放置一个断点(或~A
语句)也应该正确地向您显示。最后一点注意事项,您应该首选make_shared
而不是new