當你向stl容器中新增乙個物件的時候,進入容器的是你指定物件的拷貝;同樣,當你從容器獲取乙個物件時,你所得到的物件不是容器裡面的那個物件,而是那個物件的拷貝。一旦乙個物件進入乙個容器,以後對它的拷貝就多了。比如你從vector、string或deque中插入或刪除元素,現有容器的元素就會移動(拷貝);如果使用了排序演算法物件也會移動(拷貝)。因為這些拷貝的存在,問題也就出來了:
一、效能問題。如果用乙個拷貝過程很昂貴的物件填充乙個容器,即使乙個很簡單的操作也可能是乙個效能瓶頸。容器中移動越多的東西,在拷貝上浪費的地記憶體和時間越多。
二、安全問題。因為有繼承的存在,拷貝會導致分割。即你建立乙個以基類物件為型別的容器,當你往容器裡插入派生類物件,拷貝物件時派生類物件的派生部分將會丟失。所以當你把派生類物件插入到基類物件的容器中時你得到的結構都是錯的。
所以乙個使拷貝更高效、正確並且對分割問題免疫的辦法是建立指標的容器而不是物件的容器。拷貝指標很快並且沒有分割問題。
vue物件深拷貝 vue陷阱 深拷貝vs淺拷貝
案例重現 看下面的乙個例子 data this.info m this.info.attr1 8 console.log m 這是vue的部分 我們猜測m會輸出什麼,你會驚奇的發現m會和this.info繫結,也就是對this.info.attr1的修改,會導致m的值變化,控制台輸出的結果是 att...
javascript實現陣列或物件的深拷貝
第一 簡單粗暴 let arr 1,let copyarr json.parse json.stringify arr console.log copyarr 1,arr 1 a 3 console.log copyarr 1,copyarr 1 a 5 console.log arr 1,可以看出...
2020面試準備6 js物件的淺拷貝和深拷貝
一 淺拷貝 只轉殖第一級 1 不使用es6 let obj d d let obj2 for let key in obj console.log obj,obj2 script 2.使用es6 擴充套件運算子 let obj d d let obj2 console.log obj,obj2 三 ...