【发布时间】:2015-01-31 14:15:57
【问题描述】:
所以我在浏览一段 C++ 文本时遇到了以下代码:
class example
{
int dataMember;
public:
example& assign(const example& source)
{
if(this!=&source)
{
this->~example();
new (this) example(source);
}
}
};
好的,所以我正在尝试解码此函数分配的功能。我还明白了什么:
该函数接受类实例的常量引用并返回对该类的引用。
在
if块内,首先为当前实例调用析构函数(据我所知,当前对象被销毁并释放内存)。
现在主要问题:
new (this) example(source)
这条线让我很困扰。这里发生了什么?
如果让我猜测,我会说正在创建一个新对象并将其分配为当前对象,正如我可以从 this 关键字推断的那样。
谁能解决这个问题?这里到底是怎么回事?
这种方法安全吗? (如果分配是动态发生的,程序员将来必须手动解除分配)
谢谢。
【问题讨论】:
-
@bolov,太棒了,这正是我要找的东西。现在我将在线搜索并阅读更多相关信息。
-
这是一个可怕的代码。
-
@bolov,该对象可能没有静态生命周期。这个对象可以在任何地方,有任何生命周期。寿命不是这里的问题。
-
@AaronMcDaid 是的,你是对的,我应该说这个 new 不会分配任何内存,因此它不会添加新删除的需要。
标签: c++