std::p air 会破坏其动态分配的对象吗?
Does std::pair destroy its dynamically allocated objects?
例如,像std::vector<T*>
这样的容器会破坏它被push_back(new T)
添加的所有元素。当您像{ new T1, new T }
一样初始化它时,std::pair<T1*, T2*>
也会这样做吗?
我有这个问题是因为std::pair
是一个结构,不像类的容器(它没有任何意义,但仍然如此(。我找不到有关它的任何信息。
编辑:尽管我认为容器delete
其动态分配的元素,但这是错误的。
No.
std::vector
不会销毁指针由push_back(new T)
添加到其中的对象。
std::pair
也没有.
向量和对都会破坏它们的元素。
向量和对都不会破坏或释放由其元素指向的对象。
一些例子:
{
std::vector<int> v {42};
}
动态分配和解除分配的矢量。
{
std::vector<int*> v {new int};
}
动态分配和解除分配的矢量。我动态分配,并泄露了分配。
{
std::pair<int, int> v {42, 24};
}
没有任何动态分配。伟大。
{
std::pair<int*, int*> v {new int, new int};
}
我动态分配了两次,并泄露了两次。
{
std::pair<int*, int*> v {new int, new int};
delete v.first;
delete v.second;
}
无泄漏....但不要这样做。避免不必要的动态分配,并且不要使用拥有裸指针。
相关文章:
- C++ 将抽象类型的动态分配对象传递给函数并存储在向量中
- 动态分配对象中的字段-动态分配更好还是静态分配更好?C++
- 如何使用每个对象的单个构造函数参数动态分配C++对象数组?
- 将动态分配对象传递到 boost::any 构造函数中
- C 删除指向动态分配对象的指针
- 有关动态分配对象的问题
- 如何删除用于动态分配对象的智能指针
- C++函数返回指向动态分配对象的指针
- 如何创建指向动态分配对象的指针向量
- 动态分配对象数组,如 int
- 复制构造动态分配对象的问题
- 在类中动态分配对象指针的2D数组
- 在C++循环中正确删除动态分配对象的位置
- 如何获取指向动态分配对象的指针的基址
- 动态分配对象数组
- 如何删除指向动态分配对象的指针数组
- 返回对动态分配对象的引用
- 动态分配对象生成器
- 如何正确管理动态分配对象的内存
- 为什么valgrind显示泄漏,即使包含动态分配对象的向量被释放