7
make_shared:C++ 11を渡す 'この' のparamenterとしてのstd ::私がのstd :: make_shared</p> <p>例使用して 'この' コンストラクタに渡すためにしようとしている
// headers
class A
{
public:
std::shared_ptr<B> createB();
}
class B
{
private:
std::shared_ptr<A> a;
public:
B(std::shared_ptr<A>);
}
// source
std::shared_ptr<B> A::createB()
{
auto b = std::make_shared<B>(this); // Compiler error (VS11 Beta)
auto b = std::make_shared<B>(std::shared_ptr<A>(this)); // No compiler error, but doenst work
return b;
}
しかし、これを適切に動作しません、どのように私は適切にこれを引数として渡すことができますどのような提案?
ありがとう:未定義の動作(
a
にdelete
を呼び出そうと)を次のようにリードしながら! – RdR
'shared_from_this()'は、現在のオブジェクトがすでに 'shared_ptr'で管理されていることを要求することに注意することが重要です。私。 'int main(){A a; a.createB(); } 'は未定義の振る舞いですが、' int main(){shared_ptr a(new A); a-> createB(); } '正しいです。 –
@DavidRodríguez-dribeas絶対に。私はそれに応じて答えを更新しました。ありがとう。 –