[英]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.