リンク リストのように複数のインスタンスがリンクされているクラスを作成しています。関連するコードのベアボーンの例を次に示します。
class A
{
public:
void setNext(const A& node) { next = &node; }
const A& getNext() const { return *next; }
private:
const A* next;
}
は によって変更されていないため、 へsetNext
の引数を宣言しました。クラス A も次のノードを変更しないため、メンバー変数が宣言されます。で問題が発生します。現在のノードから次のノードを取得するオブジェクトは、ノードを変更する必要がありますが、メンバー変数は返される参照であるため、同様に変更する必要があります。const
node
setNext
next
const
getNext
const
const
私が読んだことから、const_cast
通常は設計が不十分であることを示していますが、次のノードを取得するオブジェクト内で使用するか、クラス A 内で使用して非 const 参照を返す必要があるようです。これは有効な使用const_cast
ですか、それとも私の設計のどこかに欠陥がありますか?
この件に関しては、参照を返すかポインターを返すかについて、どちらかの方法で優先することはありますか? A の有効なインスタンスを確実にsetNext
取得するために参照を取得しましたが、戻り値はどちらの方法でも返される可能性があります。