std::p air 会破坏其动态分配的对象吗?

Does std::pair destroy its dynamically allocated objects?

本文关键字:动态分配 对象 air std      更新时间:2023-10-16

例如,像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;
}

无泄漏....但不要这样做。避免不必要的动态分配,并且不要使用拥有裸指针。