- C++相談室 part125 [無断転載禁止]©2ch.net
34 :デフォルトの名無しさん (ワッチョイ 7bf8-xFql)[sage]:2016/05/25(水) 17:28:40.96 ID:8+OpaV010 - >>31
DがCを変更しないなら、const修飾子を付けることは出来る。 class D { const C& _c; public: D(const C& c) : _c(c) {} }; CがDに変更されうり、かつ、Cは一度Dを生成したら二度と使われないのであれば、move semanticsを使うことも出来る class D { C _c; public: D(C&& c) : _c(std::move(c)) {} }; CがDに変更されうる上にCが複数のDを生成するのであれば、CをDのfriendに指定して、Dのprivate constructorをCから呼ぶ事で解決できる class D; class C { std::shared_ptr<C> self; public: C() : self(std::shared_ptr<C>(this)) { return; } D* make_D(); }; class D { friend C; std::shared_ptr<C> _c; explicit D(const std::shared_ptr<C>& c) : _c(c) { return; } }; D* C::make_D() { return new D(self); } 後なんかあったっけ?
|