C++相談室 part125 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0034デフォルトの名無しさん (ワッチョイ 7bf8-xFql)
2016/05/25(水) 17:28:40.96ID:8+OpaV010Dが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); }
後なんかあったっけ?
■ このスレッドは過去ログ倉庫に格納されています