我在库中有这段代码:
class Parent
{
//some data and functions
};
void myfunc(Parent& ref);
我想在我的应用程序中执行此代码:
class Child : public Parent
{
// some other data and functions
void dostuff()
{
myfunc(*this);
}
};
通过 *this 是否安全? (没有切片,没有复制,......) 像这样调用 myfunc 更好吗:
myfunc( * ((Parent*)this) )
请注意,我无法控制 myfunc 内部发生的事情,在某些情况下,我什至不知道里面发生了什么。
我多次使用过指针传递,我已经习惯了,但之前从未使用过传递父引用。
最佳答案
myfunc(*this)
没问题,只要 myfunc
被声明为接受引用——它就是。
这不会复制对象。它将传递对原始对象的引用。此外,它不会对对象进行切片。引用将是 Base&
类型,但它所引用的对象将保持不变。
你知道,如果你在这个 Base&
上调用多态(例如,virtual
)方法,多态仍然可以正常工作并做你想做的事期望——就像你通过指针调用一样。换句话说:
Base& b = *derived;
b.SomeVirtualFoo();
...将具有相同的效果:
Base* b = derived;
b->SomeVirtualFoo();
关于c++ - 通过引用传递父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8248191/