容器中对象拷贝的正确性与高效性
2013-05-20 18:48
211 查看
首先,copy in,copy out 是STL的工作方式。
使拷贝动作高效而且正确,并防止剥离问题的发生的一个简单方法就是使容器包含指针而不是对象。也就是说使用class_name*这样的容器而不是class_name这样的容器。拷贝指针的速度非常快,并且总是会按你期望的方式进行(他拷贝构成指针的每一位),而且当它被拷贝时不会有任何剥离现象发生。unfortunately,指针container也有其自身的一些令人头疼的、与STL相关的问题。
eg:class_name w[max_num_class_name]; //创建了有max_num_class_name个class_name的数组
//每个对象都使用默认构造函数来创建
这将创建出max_num_class_name个class_name对象,即使我们只会使用其中的几个,或者我们会立即使用从其他地方得到的值来覆盖默认构造函数所提供的默认值。如果不是使用上述的数组,而是STL,则我们就可以使用vector,当需要时他会增长:
eg:vector<class_name> v_name; //创建了包含0个class_name对象的vector,当需要时它会增长。
我们也可以创建一个空的vector,它包含足够的空间来容纳max_class_name个class_name对象,但是并没有创建任何一个class_name对象。
eg:vector<class_name> v_name;
v_name.reserve(max_class_name);
这就是vector的进步,你让他创建多少对象他就创建多少对象,不多不少。你让他创建时他才会创建,只有当你使用默认构造函数的时候他才会使用。
使拷贝动作高效而且正确,并防止剥离问题的发生的一个简单方法就是使容器包含指针而不是对象。也就是说使用class_name*这样的容器而不是class_name这样的容器。拷贝指针的速度非常快,并且总是会按你期望的方式进行(他拷贝构成指针的每一位),而且当它被拷贝时不会有任何剥离现象发生。unfortunately,指针container也有其自身的一些令人头疼的、与STL相关的问题。
eg:class_name w[max_num_class_name]; //创建了有max_num_class_name个class_name的数组
//每个对象都使用默认构造函数来创建
这将创建出max_num_class_name个class_name对象,即使我们只会使用其中的几个,或者我们会立即使用从其他地方得到的值来覆盖默认构造函数所提供的默认值。如果不是使用上述的数组,而是STL,则我们就可以使用vector,当需要时他会增长:
eg:vector<class_name> v_name; //创建了包含0个class_name对象的vector,当需要时它会增长。
我们也可以创建一个空的vector,它包含足够的空间来容纳max_class_name个class_name对象,但是并没有创建任何一个class_name对象。
eg:vector<class_name> v_name;
v_name.reserve(max_class_name);
这就是vector的进步,你让他创建多少对象他就创建多少对象,不多不少。你让他创建时他才会创建,只有当你使用默认构造函数的时候他才会使用。
相关文章推荐
- 条款3:使容器里对象的拷贝操作轻量而正确
- Effective STL——容器中所发生的对象拷贝问题
- C++模板类 容器之map 及 对象副本 深/浅拷贝 等问题
- C++模板类 容器之map 及 对象副本 深/浅拷贝
- C++之模板类(Template) 容器之map 及 对象副本 深/浅拷贝 等问题
- C++模板类 容器之map 及 对象副本 深/浅拷贝 等问题
- 《Effective STL》 03 确保容器中的对象拷贝正确而高效
- C++模板类 容器之map及对象副本 深/浅拷贝等问题浅析
- 条款3:使容器里对象的拷贝操作轻量而正确
- 容器对象的深拷贝方法
- C++之模板类(Template) 容器之map 及 对象副本 深/浅拷贝 等问题
- C++模板类 容器之map 及 对象副本 深/浅拷贝 等问题
- 第3条:确保容器中的对象拷贝正确而高效
- 使容器里对象的拷贝操作轻量而正确
- 由C++ STL的vector容器中存储的对象拷贝引起的对capacity属性 的理解
- 对象容器Effective STL——容器中所发生的对象拷贝问题
- iOS 深拷贝、浅拷贝(2)容器类对象实例
- C++ STL 如何安全的将一个含有指针变量的类对象放在容器中? 避免浅拷贝问题
- 使容器里对象的拷贝操作轻量而正确
- 条款3:使容器里对象的拷贝操作轻量而正确