我想有一类含有由构造然后在类的其他地方使用的初始化的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,这是不可能的。 –