【发布时间】:2012-05-19 23:07:06
【问题描述】:
通常,在 C++ 中,将参数传递给多态对象的函数的代码使用指向它的指针似乎更可取:
class Base {};
class DerivedA : public Base {};
class DerivedB : public Base {};
void OperateOnObject(Base* obj) {};
vector<Base*> objects;
objects.push_back(new DerivedA());
objects.push_back(new DerivedB());
for (size_t i=0; i<objects.size(); i++) {
OperateOnObject(objects[i]);
}
为什么OperateOnObject() 通常被写入指向Base 的指针而不是引用?切片是否存在潜在问题? (例如 vtable 丢失了)
我看到this response 提出了一个类似的问题,但它似乎没有解决同样的问题。
【问题讨论】:
-
在我从事的所有项目中,指针与引用的偏好始终取决于多态性以外的其他因素......
-
一个额外的因素是,在 VisualStudio 中,与引用相比,您似乎获得了更多的指针调试信息(例如,最派生类型的类型信息),因此这也是首选的一个因素另一个
-
在良好的设计中,IDE/调试器的(不)能力不应影响设计的基本属性。
-
确实如此,但所有其他条件都相同......
-
它们很少相等,通常您有其他要求来弥补一个或另一个方向,例如nullptr 或设计策略的必要性,它说使用指针来表示所有权等的转移等等。
标签: c++ pointers reference polymorphism