我想让一个类包含一个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
in SomeFunction()
,这就是原因。
显然myPointer
必须在堆上分配以确保在构造函数执行完成时它不会被破坏。假设ObjectC
它的功能来自外部库。当我调用ObjectC::getPointer()
返回的指针时,它可能分配在与堆相对的堆栈上。现在我假设是这种情况,因为在构造函数完成执行后我得到一个错误。
基本上我依靠一个函数给我一个指针,然后我可以在其他地方使用它。但是,该函数在堆栈而不是堆上分配对象。
是否有一些特殊的方法可以解决这个问题,也许是双指针?还是ObjectC::getPointer()
每次我想在每个执行块内使用指针时都必须调用?如果我有很多ObjectA
依赖的函数,myPointer
那么调用ObjectC::getPointer()
每个函数将是多余的,但我不知道是否有更好的方法来解决这个问题,我觉得函数 ( ObjectC::getPointer()
) 不应该强迫我进入那种冗余.