繁体   English   中英

返回 std::shared_ptr 的向量是否安全?

[英]Is it safe to return a vector of std::shared_ptr?

我的代码是否存在返回 std::shared_ptr 向量的内存泄漏风险? 我认为这是安全的,因为在主 function 结束之前,引用计数不会为零。 我对吗?

#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 function 创建了指针,它们的引用计数都为 1。 一旦 function 返回,它们就会被复制到b中,这会增加引用计数,然后它们 go 会从 scope 中取出,并将引用计数减少到main 1 A末尾。

~A中放置断点(或cout语句)也应该正确地显示这一点。 最后一点,你应该更喜欢make_shared而不是new

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM