Son*_*ong 2 c++ shared-ptr c++11
假设我有以下代码,这是我的问题的简化示例:
#include <string>
#include <iostream>
#include <memory>
class A{
public:
std::string name() { return "class A"; }
};
class B{
public:
B(){
m_a = std::make_shared<A>();
}
std::shared_ptr<A> get_a() { return m_a; }
private:
std::shared_ptr<A> m_a;
};
std::shared_ptr<A> foo()
{
B b;
return b.get_a();
}
int main()
{
auto a = foo();
auto name = a->name();
std::cout << name;
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我想知道这样做是否安全?作为B实例的"b"将在函数foo结束时释放.主函数中的"a"是B :: m_a的shared_ptr."b"发布后使用"a"是否安全?
提前谢谢了!
那 foo
shared_ptr<A> foo()
{
B b;
return b.get_a();
}
Run Code Online (Sandbox Code Playgroud)
不会返回对ab成员的引用,而是返回成员的副本(如果不是RV优化的副本); 和shared_ptra
auto a = foo();
Run Code Online (Sandbox Code Playgroud)
将A堆实例从破坏中保存到范围结束.
因此,我认为这是安全的,Bs虽然是创建者,但毕竟只是他们创建和发布的可能许多共享资产的一个用户.
换句话说 - 最后一个关灯,而不是关灯.
| 归档时间: |
|
| 查看次数: |
638 次 |
| 最近记录: |