Delegating Constructor

Delegating Constructor: Motivation

Every constructor does basically the same

class Data
{
public:
  Data(const void *p, size_t s) : data_(p), size_(s) {}
  Data(const string& s) : data_(s.c_str()), size_(s.size()) {}  // <--- DUPLICATION!
private:
  const void *data_;
  size_t size_;
};

Delegating Constructor: Solution

Constructor delegates

class Data
{
public:
  Data(const void *p, size_t s) : data_(p), size_(s) {}
  Data(const string& s) : Data(s.c_str(), s.size()) {}   // <--- DELEGATION
private:
  const void *data_;
  size_t size_;
};