动态分配带有向量的结构
Dynamically allocating structures with vectors in them
如果我有一个动态分配的结构体,其中有一个向量,向量何时超出作用域?当我删除结构时是否会调用vector析构函数,或者我是否需要在删除结构之前强制调用析构函数?
当您动态分配结构体时,您也分配了其中的所有内容。当结构被删除时,该结构及其中的所有内容都会被销毁。编译器会注意确保调用所有析构函数。
你可能想太多了。当你销毁任何对象时,所有成员对象都被自动销毁。
struct Foo
{
Bar x;
std::vector<int> y;
};
int main()
{
Foo a;
Foo * p(new Foo);
delete p; // #2
} // #1
在点#1,a
超出作用域,因此它被销毁。这包括破坏a.y
和a.x
(按此顺序),同样的,在#2中破坏*p
和p->x
/p->y
。Foo
对象是自动分配的(如#1)还是动态分配的(如#2)是无关紧要的;
在删除struct之前,vector将一直存在
struct Foo
{
std::vector<int> X;
}
在上面的例子中,delete f也会释放vector
Foo* f = new Foo();
delete f;
如果你的Foo是这样定义的…你需要提供析构函数。
struct Foo
{
std::vector<int> *X;
Foo()
{
X = new std::vector<int> ();
}
~Foo()
{
delete X;
}
}
您可以从这两种方法中任选一种。最好的方法是使用shared_ptr,这样即使
相关文章:
- 将结构向量排序为子组
- NLOHMANN 的 JSON 库将数组转换为结构向量
- 如何在 c++ 中创建结构向量的映射
- 带unique_ptr的结构向量
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么
- C++对结构向量进行排序
- 在C++中对结构向量进行排序时出现问题
- 将结构向量保存到文件中,并从C++文件中读取结构向量
- 搜索并替换结构向量中的值
- 在结构向量中查找最接近的值
- 清除结构向量时会发生什么?
- 如何从 node-ffi 调用 c++ 中以结构向量作为参数的方法?
- 对结构向量进行两次排序
- 将一种数据类型的向量复制到同一数据类型的结构向量中的有效方法是什么
- 如何二进制搜索结构向量并在适当的索引处插入
- 结构向量中自定义结构函数的内存使用
- C++11-在结构向量中修改结构的成员
- 我正在尝试找到一个特定的结构成员,该成员是使用 lambda 函数的结构向量
- 在结构向量中搜索一个数据成员,然后打印匹配的所有数据成员