【发布时间】:2019-01-04 22:05:01
【问题描述】:
我创建一个 vtkSmartPointer 作为类变量并使用以下方法对其进行初始化:
imageStack = vtkSmartPointer<vtkImageData>::New();
imageStack(一个类变量)会被分配在堆上还是栈上?我读过这个 post 关于使用 variable = new Object();在堆上,但使用 ::New() 有什么不同吗?
另外,如果 imageStack 已经指向包含数据的内存,我通过以下方式重写它:
imageStack = vtkSmartPointer<vtkImageData>::New();
它是否释放了它之前指向的旧内存?这个post 让我相信它是,但我似乎仍然遇到堆栈溢出。
【问题讨论】:
-
如果智能指针是在堆上分配的,那么就需要另一个智能指针来管理指向第一个智能指针的指针...根据上下文
imageStack可以在堆栈上分配(如果这是在函数体内)或堆上(如果这是一个类字段初始化)。 -
变量
imageStack是自动的(根据您发布的完全不完整的示例进行最佳猜测)。它关于the assignment operator 的行为也被记录在案,检查起来永远不会有坏处。如果您需要有关堆栈溢出的帮助,请提交 minimal reproducible example 提交(压力最小),我们也许可以提供帮助。