クラスメンバのコンテキストで(スマートな)ポインタをかなり読んだ後も、フォールバック状態に対処する方法はまだわかりません。スマートポインタとコピー不可能なメンバフィールド
特定のBarオブジェクトをインスタンス化するdeafultコンストラクタを呼び出すか、Fooの1つの引数コンストラクタに何らかのポインタを渡すことによって、Foo型のオブジェクトを作成します。
- Foo以外のBarオブジェクトにアクセスする必要があるため、私はunique_ptrを使用できません。
- 私が生ポインタを使用していた場合、Fooの難聴コンストラクタが呼び出されたが、one-arg ctrが呼び出された場合は、deleteを呼び出す必要があります。
- がそこshared_ptrのですが、だから、(もちろんコンパイルしない)を、以下のスニペットでハーブサッター"Don’t pass a smart pointer as a function parameter unless you want to use or manipulate the smart pointer itself, such as to share or transfer ownership."
を引用し、どのようなタイプでm_barでしょうか?
struct Bar {
Bar(int k) {}
Bar operator=(const Bar&) =delete;
Bar (const Bar&) = delete;
};
struct Foo {
Foo() : m_bar(5) {}
Foo(Bar b) : m_bar(b);
Bar m_bar;
};
誰が 'バー'を所有していますか? 'メイン'? 'Foo'は' Bar'を所有していますか?あるいは、 'Foo'が存在する限り、それを持たせたいのですが、必要に応じて' Bar 'を所有する別の関数(共有所有権)も望みますか? – wally
"Bar?mainを誰が所有していますか?"はい "FooはBarを所有していますか?" no – user695652
その場合、おそらく 'm_bar'を参照にしますか? – wally