我想有一類含有由構造然後在類的其他地方使用的初始化的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
}
但問題是,我不能在SomeFunction()
使用myPointer
,這裏的原因。
顯然myPointer
必須在堆上分配,以保證在構造函數執行完畢它不會被破壞。假設ObjectC
,因此其功能來自外部庫。當我打電話給ObjectC::getPointer()
時,返回的指針可能被分配到與堆相關的堆棧上。現在我認爲是這樣,因爲在構造函數完成執行後,我得到一個錯誤。
基本上我依靠功能給我用至極的指針,然後我可以在其他地方使用。但是,該函數將堆中的對象而不是堆分配給堆。
是否有一些特殊的方法來解決這個問題,也許有一個雙指針?或者每次我想在每個執行塊中使用指針時,我只需要撥打ObjectC::getPointer()
?如果我有很多的功能,裏面ObjectA
依靠myPointer
然後調用ObjectC::getPointer()
每個功能是多餘的,但我不知道是否有更好的方式來解決這個問題,我覺得自己像一個函數(ObjectC::getPointer()
)不應該強迫我陷入冗餘。
你確定'objectC'不控制指向對象的生命期嗎?看來是這樣。你可能應該有'ObjectC objectC'作爲你的類的成員。另外,ObjectC objectC();應該是ObjectC objectC;(前者是一個函數聲明)。 –
不知道如何定義ObjectB和ObjectC,這是不可能的。 –