(Visual Studio 2010 を使用) プロジェクトで既存のクラスの shared_ptr を作成しようとしています (クラスは std::shared_ptr が存在する 10 年前に作成されました)。このクラスは、別のオブジェクトへの非 const ポインターを受け取ります。空のパラメーター コンストラクターはプライベートです。
class Foobar {
public:
Foobar(Baz* rBaz);
private:
Foobar();
}
それに shared_ptr を作成しようとすると、うまくいきません。
Baz* myBaz = new Baz();
std::shared_ptr<Foobar> sharedFoo = std::make_shared<Foobar>(new Foobar(myBaz));
VS2010では、これは私に与えます
error C2664: 'Foobar::Foobar(const Foobar &)' : cannot convert parameter 1 from 'Foobar *' to 'const Foobar &'
3> Reason: cannot convert from 'Foobar *' to 'const Foobar'
何らかの理由で、を受け取るコンストラクターではFoobar
なく、のコピー コンストラクターを呼び出しているようBaz*
です。
その部分もよくわかりませんcannot convert from 'Foobar *' to 'const Foobar'
。私の最良の解釈は、私のテンプレート型shared_ptr<Foobar>
が間違っているということです。私はそれを作りましたshared_ptr<Foobar*>
が、これは間違っているようです。私が見たすべての例は、型を生のポインタにしません。
すべてshared_ptr<Foobar*>
を適切にコンパイルするように見えますが、すべてがスコープ外にFoobar
なったときにオブジェクトが適切に削除されないようにしますか?shared_ptr
編集:これは関連しているようですが、Boost を使用していません: boost make_shared は const 参照を受け取ります。これを回避する方法はありますか?
Edit2:明確にするために、なぜ私が を使用しているのか疑問に思っている場合make_shared()
、実際のコードでは、sharedFoo
変数は 3 番目のクラスのクラス メンバーです ( と から独立しFoobar
ていBaz
ます)。