【发布时间】:2016-02-09 08:32:52
【问题描述】:
假设我有以下代码,这是我的问题的简化示例:
#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;
}
我想知道这样做是否安全? “b”是 B 的一个实例,将在函数 foo 结束时释放。主函数中的“a”是 B::m_a 的 shared_ptr。在“b”释放后使用“a”是否安全?
非常感谢!
【问题讨论】:
-
请发布可编译的代码。 IE。没有语法错误,带有正确的
main和#includes。 -
我已经阅读了这两个问题但是我决定发布一个新问题,因为我想确保这样做是安全的(或不安全的)事件持有 shared_ptr 的“父”类为成员变量超出范围。
-
如果这样不安全,那么我不确定我是否首先理解 shared_ptr 的意义。
-
Christian 和 decltype_auto,你是对的,我只是编辑了代码使其可编译。
标签: c++ c++11 shared-ptr