C++ 需要堆分配的指针,但I';m给定堆栈分配的指针
我想让一个类包含一个由构造函数初始化的C++ 需要堆分配的指针,但I';m给定堆栈分配的指针,c++,pointers,memory-management,C++,Pointers,Memory Management,我想让一个类包含一个由构造函数初始化的std::unique\u ptr,然后在类的其他地方使用 我有一个类,它包含一个std::unique\u ptr,如下所示: class ObjectA { public: ObjectA(); ~ObjectA(); void SomeFunction(); private: std::unique_ptr<ObjectB> myPointer; } 但问题是我不能在SomeFunction()中使用my
std::unique\u ptr
,然后在类的其他地方使用
我有一个类,它包含一个std::unique\u ptr
,如下所示:
class ObjectA
{
public:
ObjectA();
~ObjectA();
void SomeFunction();
private:
std::unique_ptr<ObjectB> myPointer;
}
但问题是我不能在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();}
您确定objectC
不控制指向对象的生存期吗?看来情况就是这样。您可能应该将ObjectC ObjectC
作为类的成员。另外,ObjectC ObjectC()
应该是ObjectC ObjectC代码>(前者是函数声明)。如果不知道ObjectB和ObjectC是如何定义的,就无法确定。
ObjectA::ObjectA()
{
ObjectC objectC;
myPointer = std::move(std::unique_ptr<ObjectB>(objectC.getPointer())); //setup pointer
}
ObjectA::~ObjectA() {}
void ObjectA::SomeFunction()
{
//use myPointer here
}