据我所知,对于这两个向量声明:
//TYPE 1
std::vector<cls> vec; //cls is user defined datatype(A class)
向量的内存在堆栈上分配,向量中内容的内存在堆上分配。
以下声明也是如此(如果我错了,请纠正我):
//TYPE 2
std::vector<cls*> vec; //cls is user defined datatype(A class)
现在,当类型 1 中的向量超出范围时,将为存储在其中的对象释放内存。
但是,如果我插入如下元素(假设我有适当的重载构造函数)然后向量超出范围,则类型 2 会发生什么:
vec.push_back(new cls(5));
我明确尝试调用 clear 但未调用析构函数。是否会自动释放内存并调用析构函数。如果没有,那么如何实现。
此外,如果我将向量声明为:
std::vector<cls*> *vec = new std::vector<cls*>;