关于vector中类实例的初始化和析构
来源:互联网 发布:cisco 三层端口ip配置 编辑:程序博客网 时间:2024/06/06 03:01
vector若其中元素是类的实例,实际上并不是把一个该实例放入容器中,而是建立一个副本,其中可能还涉及到临时实例,
对vector进行操作(例如push_back)还会涉及到实例的删除与重建。所以就会多次调用类的构造函数和析构函数。
容器里存放的是对象的副本,如果有定义拷贝构造函数,则调用此函数,否则调用默认构造函数,执行浅拷贝,
所以如果类中涉及到动态空间的申请,在拷贝函数中要执行深拷贝。
#include <iostream>#include<vector>using namespace std;class test{public:test(){cout<<"test::test"<<endl;}~test(){cout<<"test::~test"<<endl;}test(const test&s){cout<<"test::test(const test&s)"<<endl;}};int main(int argc, char *argv[]){test xxx;std::vector<test> buf;cout<<"--"<<endl;buf.push_back( xxx );cout<<"--"<<endl;return 0;}
G++ 4.2输出如下
test::test
--
test::test(const test&s)
--
test::~test
test::~test
VC8 的结果如下
test::test
--
test::test(const test&s)
test::test(const test&s)
test::~test
--
test::~test
test::~test
所以要看库的具体实现。
在vector中使用类指针则不会涉及以上问题。
- 关于vector中类实例的初始化和析构
- vector的初始化和遍历
- vector的初始化和遍历
- vector的定义和初始化
- vector的初始化和遍历
- vector的初始化和遍历
- 初始化vector实例的7种方法
- 关于JAVA中Vector类的说明
- 类和实例的初始化循环问题
- 类内初始化,范围for语句,vector的vector,容器的cbegin和cend
- vector对象的定义和初始化
- vector 对象的初始化和操作
- vector 对象的定义和初始化
- vector对象的定义和初始化
- vector的几种初始化和遍历
- vector对象的定义和初始化
- vector的几种初始化和遍历
- vector对象的定义和初始化以及vector迭代器iterator
- Android apk项目中添加ffmpeg编解码库
- 中国大众富人的聚财术
- Java专业书籍
- java.lang.NoClassDefFoundError: javax/persistence/Cacheable
- DLL的创建和使用
- 关于vector中类实例的初始化和析构
- linux中sparce与__be32
- MsXml创建和解析XML示例
- C++ 操作XML的完整例子——MSXML篇
- 第七堂作业
- 第六周项目四 指针改正了 一个函数中的变量生命仅限于在那个函数里面,在那个函数外面不能直接取地址
- 你是一个工资太低的程序员吗?
- IOS中CGD的使用
- Fedoral17 Linux和windows之间通过NFS实现文件共享