0

コンストラクターでクラスを引数として渡すとき、ほとんどの場合、ポインターを渡すことになります。その主な理由は、インスタンス化できない抽象クラスを渡す必要があり、参照を null にすることはできないため、実際には選択肢がありません...

例を次に示します。

// Abstract class A
class A { 
    virtual void foo() = 0;
};

class B : public A {
    void foo();
};

class C {
public:
    C(A* a) : _a(a) {};
private:
    A* _a;
};

オブジェクトが指している(削除時に削除する)ことにC注意したい場合もあれば、オブジェクトを削除せずに削除したい場合もあります。A_aC_aA

適切なプログラミング方法論を持つためのベスト プラクティスは何ですか?

4

1 に答える 1

2

shared_ptr共有された所有権を表すために使用し、unique_ptr一意の所有権を表すために使用します。の存続期間がオブジェクト (または を所有する別のオブジェクト)Cの存続期間によって制限されていることが確実な場合は、参照を使用するか、nil デリータを指定して を使用できます。AAshared_ptr

于 2012-07-06T12:21:15.967 に答える