假設我有下面的代碼,這是我的問題的一個簡單的例子:是否安全返回的成員變量是一個shared_ptr
#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」是否安全?
非常感謝提前!
也許重複? https://stackoverflow.com/questions/10643563/how-to-return-smart-pointers-shared-ptr-by-reference-or-by-value和https://stackoverflow.com/questions/974964/best-練習何時返回智能指針? – coincoin
請發佈可編輯代碼。即沒有語法錯誤,帶有正確的'main'和'#include's。 –
我已經閱讀了兩個問題,但是我決定發佈一個新問題,因爲我想確保這樣做是安全的(或不安全),將「shared_ptr」作爲成員變量的「父」類超出範圍。 – Song