簡體   English   中英

為什么不在默認的復制構造函數中實現深層復制?

[英]Why not implement deep copy in default copy constructor?

當使用默認復制構造函數和默認賦值運算符時,所有人都會一直提醒我們,因為它們是卷影副本所以要小心。 但是,我總是很困惑,為什么不在默認的拷貝構造函數和c ++中的默認賦值運算符中進行深層復制,這樣就不需要編寫自己的拷貝構造函數實現來防止任何意外?

C ++實現了按值復制,這​​意味着它基本上是x = y; 在許多情況下,這就足夠了。

但是,在指針的情況下,編譯器對所指向的內容一無所知。 它將復制指針的值,但不會因此而復制基礎項。 例如,如果你有一個這樣的類:

class Foo
{
  char *data;
};

那么編譯器應該對data做些什么呢? 它不知道它是指向單個char還是char數組。 它不知道如何分配內存或如何釋放內存。 它不知道它是否應該復制,或者Foo所有實例應該指向同一個實例。

因此,語言采用完全合理的默認姿態,即只復制指針的值。 如果你想要更多的東西,你必須自己做,因為只有你完全理解變量的用例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM