1.确保容器中的对象拷贝正确而高效
生活随笔
收集整理的這篇文章主要介紹了
1.确保容器中的对象拷贝正确而高效
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
向容器中插入或者返回對象,或者其他類型的操作(remove unique)都會涉及到對象的拷貝。
這也是為什么要求容器的元素類必須支持拷貝(拷貝構造函數, 拷貝復制函數)的原因。
以類Widget為例 :
class Widget? { public:...Widget(const Widget&);Widget& operator = (const Widget&);...?? ? };如果大量向容器中插入元素,同時拷貝構造函數的開銷又比較大,那么操作將非常耗時。
如果向一個基類對象的容器中插入子類對象,將會出現"對象剝離",插入時調用的是基類的拷貝構造函數,而不是子類的拷貝構造函數。
下面就是這種情況:
class SpecialWidget : public Widget { ... } std::vector<Widget> datas; SpeicalWidget one; datas.push_back(one);?修改也很容易,只需要保存基類指針。
std::vector<Widget*> datas; SpecialWidget one; datas.push_back(&one);容器存在的意義是為了避免不必要的拷貝,但是無法避免拷貝。
vector可以在需要時才創建對象,這點數組無法做到的。
data1使用默認構造函數創建了10個Widget對象,不管其中是否全部都要使用。
data2只是預留了10個對象的空間,而沒有立即創建10Widget對象。
?
總結
以上是生活随笔為你收集整理的1.确保容器中的对象拷贝正确而高效的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STL 容器迭代器失效总结
- 下一篇: 2.区间成员函数优先于与之对应的单元素成