簡體   English   中英

在對象已經初始化后,如何使用賦值運算符覆蓋 C++ 中的類對象?

[英]How can I overwrite a Class Object in C++ using the Assignment Operator, after the Object has already been initialized?

我希望能夠做這樣的事情

MyClass my_class;
vector<MyClass> my_vector; // Imagine this is already populated
my_class = my_vector[0];

我想我需要像這樣為 MyClass 編寫一個賦值運算符

MyClass& operator=(const MyClass& rhs);

我逐步完成了我的程序,它甚至沒有運行賦值運算符重載......

我在這里做錯了嗎?

賦值運算符必須定義為成員函數,如下所示:

class MyClass {
...
public:
   MyClass& operator=(const MyClass& rhs) {
       ....
       return *this;
   }
};

即使未填充向量,它也應該運行MyClass::operator=賦值運算符。 但是在訪問rhs時它會導致未定義的行為(段錯誤)。

它不運行賦值運算符,也許它被優化掉了,如果在編譯時啟用了優化,並且從不使用my_class

從技術上講,您的代碼沒有任何問題(假設您在使用my_vector[0]時確實沒有訪問越界)。 my_vector[0]通過引用返回一個MyClass對象,然后在下一行分配

my_class = my_vector[0];

使用默認的MyClass.operator= 如果您沒有定義復制賦值運算符,編譯器會為您隱式定義一個(除非您定義了移動語義運算符)。 默認賦值運算符會逐個成員進行復制(即,它調用每個成員的賦值運算符;對於 POD,它只是進行逐位復制)。

我逐步完成了我的程序,它甚至沒有運行賦值運算符重載......

如果您確實聲明並定義了一個復制賦值運算符,那么編譯器應該調用它。 你是如何測試它沒有被調用的?

暫無
暫無

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

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