好,我班上有不平凡的析构函数。
我可以做点什么:
Foo& Foo::operator=(Foo&& from) {
~Foo()
// Copy the stuff and cleanup "from"
}
我试图实现的是避免代码重复。
此外,我可以编写一些清理函数,但是如果我可以调用析构函数,那又做什么呢?
原则上,如果您随后使用placement new将对象构造回现在为空的空间,则可以用这种方式调用析构函数。像这样的东西:
Foo& Foo::operator=(Foo&& from) {
void* p = this;
~Foo();
return *(new(p) Foo(std::move(from))); // calls Foo(Foo&&) constructor
}
[此方法有明显的局限性-例如,参见this answer。例如,如果Foo
具有const
限定或引用类型的非静态成员,它将表现出不确定的行为;或者此运算符实际上应用于从Foo
派生的类的基类子对象。由于这个原因和其他原因,通常不这样做。