Project: mesos
Issue MESOS-2756: Update style guide: Avoid object slicing
In order to improve the safety of our code base, let's augment the style guide to: "Disallow public construction of base classes" so that we can avoid the object slicing problem. This is a good pattern to follow in general as it prevents subtle semantic bugs like the following: {code:title=ObjectSlicing.cpp|borderStyle=solid} #include #include class Base { public: Base(int _v) : v(_v) {} virtual int get() const { return v; } protected: int v; }; class Derived : public Base { public: Derived(int _v) : Base(_v) {} virtual int get() const { return v + 1; } }; int main() { Base b(5); Derived d(5); std::vector vec; vec.push_back(b); vec.push_back(d); for (const auto& v : vec) { printf("[%d]\n", v.get()); } } {code}
Story points: 1