如何在ASNI C ++中替换自身?我想要一个像foo-> replaceBy(bar)这样的函数 这会导致对象foo自行删除并用bar替换指针
if (foo->isFoo())
{
foo->replaceBy(bar);
}
ASSERT(foo->isFoo(), false);
ASSERT(foo->isBar(), true);
答案 0 :(得分:1)
除非您将指针传递给指针或对指针的引用(example here),否则无法执行此操作:
void replaceBy(Foo*& foo, Foo* bar) {
delete foo;
foo = bar;
}
//...
foo->replaceBy(foo, bar);
这会破坏replaceBy
作为非静态成员函数的目的。
还有überevil宏方式(不):
#define FOO_REPLACE_BY(foo, bar) do {delete foo; foo = bar;} while(0)
我建议你重载operator=
并尽可能远离指针,或者至少使用智能指针(允许指针分配而不会发生内存泄漏)。
答案 1 :(得分:1)
指针不能替换自己 - 对象当然可以修改自己,但this
是const
,因为可能有多个指针指向一个对象从逻辑上讲,对象如何知道它属于哪个指针(它根本不属于单个甚至任何指针)。
但是,Envelope–Letter pattern可能对您的特定问题有所帮助。
答案 2 :(得分:0)
使用PIMPL
成语,很容易有效地让对象互相吸引:The Pimpl Idiom in practice
也许你还想要一个swap
方法来交换两个对象的内容。 https://stackoverflow.com/a/843418/1149664