C++ std::vector元素的内存分配问题(补充)

网友投稿 255 2022-09-18

C++ std::vector元素的内存分配问题(补充)

在上篇博文​​C++ std::vector元素的内存分配问题​​​中我们已经明确了使用std::vector容器时元素在内存中的创建情况。 所以,我个人觉得使用​​​std::vector vec;​​​这种类型的最省时省力。 我们还是看原来的例子:

#include #include using std::cout;using std::vector;class A{public: A(); //构造函数 A(const A& a); //拷贝构造函数 ~A(); //析构函数};A::A(){ cout << "A的构造函数..." << '\n';}A::A(const A& a){ cout << "A的拷贝构造函数..." << '\n';}A::~A(){ cout << "A的析构函数..." << '\n';}int main(){ vector vecA; A a; vecA.push_back(a); return 0;}

运行结果如下:

A的构造函数...A的拷贝构造函数...A的析构函数...A的析构函数...

在main函数中我们创建了一个std::vector容器,创建了一个A对象,并将创建的A对象加入到std::vector容器中。在这个过程中,首先​​A a;​​​这一句使用A的构造函数初始化A对象,并且A对象是在栈上创建的。​​vecA.push_back(a);​​​在堆上拷贝构造了A,然后将原来栈上的A进行析构。所以,我们看到输出结果中先是调用A的拷贝构造函数,然后再调用A的析构函数。最后,在退出main函数之前,std::vector容器会自动再次调用A的析构函数销毁掉堆上的A。这就是整个过错。 所以,这样使用std::vector我们就不用担心对象的析构问题,因为std::vector会帮我们做最后的析构操作。唯一的确点就是中间存在对A对象的拷贝,可能稍微会影响性能,但是如果容器中的元素不多的时候,关系是不大的。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:仿射变换
下一篇:Data Management Tools(数据管理工具)《二》
相关文章

 发表评论

暂时没有评论,来抢沙发吧~