我班上有不平凡的析构函数。
我可以这样做吗:
Foo& Foo::operator=(Foo&& from) {
~Foo()
// Copy the stuff and cleanup "from"
}
我要实现的目的是避免代码重复。
此外,我可以编写一些清理函数,但是如果可以调用析构函数,那又有什么用呢?
答案 0 :(得分:3)
原则上,如果您随后使用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
派生的类的基类子对象。由于这个和其他原因,通常不这样做。