std::shared_ptr的std::move()移動語義底層分析
執行std::move()之前:
執行std::move()之后:
結論:一個淺拷貝
sizeof(std::shared_ptr) = 8字節
pss1 : 0x0028fea8
pss2 : 0x0028fea0
(棧是逆增長的)
觀察執行std::move前,pss1 : 0x0028fea8 開始的8個字節的值,
然后執行后 pss1 : 0x0028fea8開始的8個字節的值復制到 pss2 : 0x0028fea0 后,清零pss1 : 0x0028fea8 開始的8個字節的值。
過程:
std::move()的功能是將一個左值轉換為右值,
所以執行std::stdred_ptr<> pss2(std::move(pss1))時,是調用了std::shared_ptr<>的移動構造函數(移動構造是需要一個右值),而該移動構造函數是一個淺拷貝的操作。