我将vtkSmartPointer创建为类变量,并使用以下方法对其进行初始化:
imageStack = vtkSmartPointer<vtkImageData>::New();
将在堆或堆栈上分配imageStack(一个类变量)吗?我已经阅读过post,有关使用变量= new Object();。在堆上,但是使用:: New()有什么不同吗?
此外,如果imageStack已经指向内存中包含数据的内存,那么我会这样做:
imageStack = vtkSmartPointer<vtkImageData>::New();
是否释放了以前指向的旧内存? post使我相信它是,但是我似乎仍然会出现堆栈溢出。
答案 0 :(得分:2)
imageStack(类变量)会分配在堆还是堆栈上?
如果它是静态成员变量,则它具有静态存储。如果它是一个非静态成员变量,则它是类实例的子对象。当超级对象被销毁时,它将被销毁。
但是,根据VTK的引用,由变量指向并由函数New
创建的对象使用动态存储。无法在堆栈上创建vtkObject
实例(例如vtkImageData
)。
[作业]是否释放了以前指向的旧内存?
可能;不一定。
如果智能指针曾经指向一个对象,则在为其分配了新值后,它将不再引用该对象。 VTK参考没有详细说明,但确实指出智能指针使用参考计数。大概在删除最后一个引用时,该对象将被破坏。