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()
。 .