【发布时间】:2014-07-28 07:45:01
【问题描述】:
我遇到了这样的 C++ 代码:
T& T::operator=(const T&t)
{
...
new (this) T(t);
...
}
这条线对我来说很陌生:new (this) T(t);
我可以看到它正在调用复制构造函数来填充“this”,但不知何故我无法理解语法。估计我已经习惯了this = new T(t);
你能帮帮我吗?
【问题讨论】:
-
Placement new。
this不是左值,所以this = new T(t);无法编译。 -
不过,使用placement new in 进行复制是邪恶的。尤其是在继承方面真的很糟糕。当有虚拟基地时。
-
@chris IIRC
this = new T(t);是 真的 用于放置新的旧语法。 -- 编辑:是的,直到 CFront 的 2.0 版,D&E pp. 91-92 -- 2.0 版于 1989 年发布,所以这个语法早于 25 年 o.O -
哦,没有意识到
T是类本身而不是模板参数。在那种情况下,@my_question,一定要看看复制交换成语。 -
@dyp 好吧,我知道这不是一个坏主意的唯一原因。
标签: c++