我無法理解C++移動語義。假設我想從一個方法返回一個大對象。爲了使這個操作更高效,我使用大對象類的移動構造函數。我調用一個方法來獲取一個大對象並將其傳遞給另一個將處理它的方法。移動構造函數是如何工作的?
processLargeObject(getLargeObject());
餘寫方法getLargeObject()
其中創建一個較大的對象。如果我創建的對象沒有新的操作符,我可以理解存儲是分配在堆棧上的。在我事先知道對象的大小並將其表示爲數組的情況下,可將此大對象定義爲double foo[1000000000];
。現在移動構造函數裏面,如果我說
foo = other.foo;
那麼移動的對象仍然會駐留在堆棧和堆棧擴展可以被覆蓋。
所以這不能是如何使用移動構造函數。移動構造函數只能用於移動堆中的物體嗎?
'foo = other.foo;'如果'foo'是一個雙精度數組,則不會編譯。無論如何,你會如何移動一組普通的雙打? – Praetorian
這是否意味着我必須遍歷數組並創建副本? – AggieMan
您是否嘗試過聲明並使用一個在其中包含十億個雙精度數組的對象?看起來像是溢出堆棧的好方法。你應該使用'vector'然後移動實際上是有意義的。 –
Praetorian