std::unique_ptrコンストラクターによって初期化され、クラスの他の場所で使用されるクラスをクラスに含めたいと思います。
だから私はstd::unique_ptrこのようなものを含むクラスを持っています:
class ObjectA
{
public:
    ObjectA();
    ~ObjectA();
    void SomeFunction();
private:
    std::unique_ptr<ObjectB> myPointer;
}
次に、クラスのソース ファイルmyPointerで、コンストラクターでセットアップされ、で使用されSomeFunction()ます。
ObjectA::ObjectA()
{
    ObjectC objectC;
    myPointer = std::move(std::unique_ptr<ObjectB>(objectC.getPointer())); //setup pointer
}
ObjectA::~ObjectA() {}
void ObjectA::SomeFunction()
{
    //use myPointer here
}
myPointerただし、問題は、 で使用できないことです。そのSomeFunction()理由は次のとおりです。
myPointerコンストラクターの実行が完了したときにヒープが破棄されないように、明らかにヒープに割り当てる必要があります。ObjectCその結果、その関数は外部ライブラリからのものであると仮定します。戻り値のポインターを呼び出すとObjectC::getPointer()、おそらくヒープに並置されたスタックに割り当てられます。コンストラクターの実行が終了した直後にエラーが発生するため、これが当てはまると思います。
基本的に、私は関数に依存してポインターを提供し、それを使用して他の場所で使用できます。ただし、関数はオブジェクトをヒープではなくスタックに割り当てます。
おそらく二重ポインタを使用して、この問題を解決する特別な方法はありますか? ObjectC::getPointer()または、各実行ブロック内でポインターを使用するたびに呼び出す必要がありますか? ObjectA内部に依存する関数がたくさんある場合、関数ごとmyPointerに呼び出すObjectC::getPointer()のは冗長になりますが、これを修正するより良い方法があるかどうかはわかりませんObjectC::getPointer()。 .