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