Joris Van Remoortere created MESOS-2756:
-------------------------------------------

             Summary: Update style guide: Avoid object slicing
                 Key: MESOS-2756
                 URL: https://issues.apache.org/jira/browse/MESOS-2756
             Project: Mesos
          Issue Type: Improvement
            Reporter: Joris Van Remoortere
            Assignee: Joris Van Remoortere


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 <stdio.h>
#include <vector>

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<Base> vec;
  vec.push_back(b);
  vec.push_back(d);
  for (const auto& v : vec) {
    printf("[%d]\n", v.get());
  }
}
{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to