您的位置:首页 > 其它

容器中对象拷贝的正确性与高效性

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的进步,你让他创建多少对象他就创建多少对象,不多不少。你让他创建时他才会创建,只有当你使用默认构造函数的时候他才会使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: