オブジェクト インスタンスを別のクラスのメンバー変数として処理するためのベスト プラクティスを知りたいです。さまざまな投稿を読んだ後、一般に、メンバー変数としてオブジェクトへの参照を持つことは避けるべきであるように思われますが、ポインターを使用することが良い解決策であるかどうかはわかりません. もう 1 つの可能性はconst
、クラス コンストラクターのパラメーターとして参照を持ち、コピー コンストラクターを使用してメンバー変数を初期化することです。
- この状況を処理するための経験則は何ですか?
share_ptr
メンバー変数として使用するのはどうですか?- メンバー変数が抽象クラスを参照している場合はどうなりますか? この場合、ポインターまたは参照に代わる他の方法はありますか?
編集:
質問に対する答えは文脈に大きく依存する可能性があるため、クラス メンバが抽象クラスを参照する場合に指定します。例として、戦略パターンを実装する次のコードを考えてみましょう。
class Client{
// reference to Abstract strategy
void execute(){
strategy.doStuff();
}
}
class AbstractStrategy{
public:
virtual void doStuff() = 0;
}
class ConcreteStrategy{
void doStuff(){}
}
には純粋仮想関数があるためAsbtractStrategy
、それを のメンバーとして持つ唯一の方法Client
は、ポインターまたは参照を使用することです。より良い解決策はありますか?