簡體   English   中英

在結構中復制構造函數:數組是否被復制

[英]copy constructors in structs: Do arrays get copied

我對C ++中的拷貝構造器行為有疑問。 我有一個結構如下:

struct Vec4
{
public:
   float elems[4];

};

現在,如果我做類似的事情:

Vec4 copied = some_func(); // returns a Vec4 object

這將執行elms數組的深層復制還是僅復制指針地址? 我認為應該是后者,並且應該提供顯式的復制構造函數和賦值運算符,但不確定。

我做了一個小測試,它做了應該做的事情,但是我不確定那是否只是偶然!

是的, elemsVec4對象的子對象,因此它將與Vec4一起復制。 沒有要復制的指針。 數組元素實際上嵌入在Vec4對象中。

我發現在C和C ++中,術語“深層復制”和“淺層復制”有點誤導。 我認為,考慮它的更好方法是默認副本不會遵循任何間接級別(例如指針)。 您可以有一個真正的“深層”對象(許多子對象的子對象等等),其中不涉及任何間接操作,並且仍然會復制整個對象,但我們仍將其稱為“淺層復制”。 如果需要遵循任何間接方式,則需要實現執行“深層復制”的自定義副本構造函數。

暫無
暫無

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

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