C++ クラス メンバ関数が引数としてオブジェクトへのポインタを必要とする場合、参照渡しは悪い習慣と見なされますか?
たとえば、次のコードは機能しますが、参照渡しがないと危険なコードになり、実行時に壊滅的なエラーが発生します。
class ClassA
{
public:
void SetPointer(const ClassB& classb) // Remove 1 ampersand and serious errors will occur
{
if(ptr_to_classb == nullptr) // Initialized to nullptr in constructor
ptr_to_classb = &classb;
else
throw(...); // Throw some error
}
private:
ClassB* ptr_to_classb;
}
値渡しで引数のコピーが作成された場合、後で逆参照するときに悲惨な結果になることを考慮してください。
別の方法は次のとおりです。
class ClassA
{
public:
void SetPointer(const ClassB* const classb)
{
if(ptr_to_classb == nullptr) // Initialized to nullptr in constructor
ptr_to_classb = (ClassB*)(classb);
else
throw(...); // Throw some error
}
private:
ClassB* ptr_to_classb;
}
私は一貫性が好きで、最初のタイプにデフォルト設定されていますが、2 番目の形式の方がより良い方法であると考えられます。これは事実ですか?