![](/img/trans.png)
[英]C++ If I have an object pointer, are the method variables allocated on the stack or heap?
[英]Need a heap allocated pointer, but I'm given a stack allocated pointer
我想让一个类包含一个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::getPointer()
,您不仅会获得“ a”指针。 该函数必须指定对指针有效的操作,尤其是应如何处置它。
通常,这将是delete
,但也可能是例如fclose
。 您必须阅读文档。 如果返回的指针的寿命的那一世匹配objectC
,则寿命objectC
应该匹配myPointer
。 因此它可能应该是成员,这反过来意味着myPointer
可能是多余的。 您可以用private: ObjectB& getB() { return *myObjectC.GetPointer(); }
代替private: ObjectB& getB() { return *myObjectC.GetPointer(); }
private: ObjectB& getB() { return *myObjectC.GetPointer(); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.