addressof 与 移动函数实践

std::addressof 用于获得真实地址,无视 operator& 的重载。

因此为了避免 operator& 重载问题,应该在移动函数判重中使用 std::addressof

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
auto MyClass(Myclass&& another) noexcept {
	if (&another != this) { /* ... */ } // ill-formed

	if (std::addressof(another) != this) { // ok
		/* ... */
	}

	return *this;
}

auto operator=(Myclass&& another) noexcept { /* ... */ } // 同理
最后更新于 Dec 21, 2024 00:21 +0800