C++ 正在使用::New()在堆或堆栈上分配智能指针吗?

C++ 正在使用::New()在堆或堆栈上分配智能指针吗?,c++,pointers,vtk,C++,Pointers,Vtk,我创建一个vtkSmartPointer作为类变量,并使用以下命令初始化它: imageStack = vtkSmartPointer<vtkImageData>::New(); imageStack=vtkSmartPointer::New(); imageStack(类变量)是在堆上还是在堆栈上分配的?我读过关于使用variable=newobject()的文章;在堆上,但是使用::New()有什么不同吗 另外,如果imageStack已经指向内存中包含数据,并且我通过执行以

我创建一个vtkSmartPointer作为类变量,并使用以下命令初始化它:

imageStack = vtkSmartPointer<vtkImageData>::New();
imageStack=vtkSmartPointer::New();
imageStack(类变量)是在堆上还是在堆栈上分配的?我读过关于使用variable=newobject()的文章;在堆上,但是使用::New()有什么不同吗

另外,如果imageStack已经指向内存中包含数据,并且我通过执行以下操作将其重写:

imageStack = vtkSmartPointer<vtkImageData>::New();
imageStack=vtkSmartPointer::New();
它是否释放了之前指向的旧内存?这让我相信这是真的,但我似乎仍然得到了堆栈溢出

imageStack(类变量)是在堆上还是在堆栈上分配的

如果它是静态成员变量,则它具有静态存储。如果它是非静态成员变量,则它是类实例的子对象。当超级对象被销毁时,它将被销毁

但是,根据VTK的引用,变量所指向的对象以及由函数
New
创建的对象使用动态存储。无法在堆栈上创建
vtkObject
实例(例如
vtkImageData

[作业]是否正在释放先前指向的旧内存

可能;不一定


如果智能指针用于指向对象,则在为其指定新值后,它将不再引用该对象。VTK引用的细节很简单,但它确实说明智能指针使用引用计数。大概在删除最后一个引用时,对象将被销毁。

如果在堆上分配了智能指针,则需要另一个智能指针来管理指向第一个智能指针的指针。。。根据上下文的不同,
imageStack
可以在堆栈(如果它在函数体内部)或堆(如果这是类字段初始化)上分配。变量
imageStack
是自动的(最好根据您发布的完全不完整的示例进行猜测)。它的行为也被记录在案,这对检查是没有坏处的。如果您想获得有关堆栈溢出的帮助,请呈现一个呈现它(应力最小),我们可能能够提供帮助。大概在删除最后一个引用时,对象将被销毁。是的,这就是它的工作原理。