[英]Overloading of = operator for a class
我最近在操作符重載中刷新了我的C ++知識。 按照建議,我operator overload of '='
的operator overload of '='
返回對*this
的引用。 但后來我發現了一個問題: -
#include <iostream>
using namespace std;
class MyClass
{
int num = 4;
public:
MyClass() = default;
MyClass(int x) : num(x) {}
void getnum(int x)
{
num = x;
}
void shownum()
{
cout << num << '\n';
}
MyClass& operator = (const MyClass& obj) // works even without const
{
this->num = obj.num;
return *this;
}
~MyClass() = default;
};
int main()
{
MyClass x, y(5), z(7);
z = MyClass(8) = y; // temporary object return reference
x.shownum();
y.shownum();
z.shownum();
}
這個代碼不會導致UB
即使臨時對象MyClass(8)
介於其間將等同於y
(精細沒問題)但是它的引用將被發送為與z
等同。 為什么dangling reference
問題不會出現在這里? 為什么重載函數在沒有const MyClass&' on the temporary object 'MyClass(8)
?
臨時居住直到完整的表達結束。 最后臨時消失,但到那時分配已全部執行,因為你沒有將參考存儲在任何地方,臨時離開是可以的。
第一個賦值MyClass(8) = y;
返回一個MyClass&
並且沒有告訴任何關於臨時的事情。 因此它匹配下一個operator=
的參數,無論是否需要const或非const參數。
如果你試圖只分配一個臨時的z = MyClass(8);
,您將看到它現在要求參數為const引用。
此外,這里沒有懸空引用,因為臨時對象一直存在到完整表達式的末尾(通常在;
),並且沒有指針或引用保存在任何地方。 只是num
值的副本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.