Private constructor does not allow to create derived classes.

This commit is contained in:
Egor Pugin 2015-09-26 13:59:26 +03:00
parent bf8f1b8f49
commit 240bc0ea0c

View File

@ -3833,7 +3833,7 @@ How would a maintainer know whether `j` was deliberately uninitialized (probably
**Example*: **Example*:
class B { class B {
private: protected:
B() { /* ... */ } // create an imperfectly initialized object B() { /* ... */ } // create an imperfectly initialized object
virtual void PostInitialize() // to be called right after construction virtual void PostInitialize() // to be called right after construction
@ -3859,7 +3859,7 @@ How would a maintainer know whether `j` was deliberately uninitialized (probably
shared_ptr<D> p = D::Create<D>(); // creating a D object shared_ptr<D> p = D::Create<D>(); // creating a D object
By making the constructor `private` we avoid an incompletely constructed object escaping into the wild. By making the constructor `protected` we avoid an incompletely constructed object escaping into the wild.
By providing the factory function `Create()`, we make construction (on the free store) convenient. By providing the factory function `Create()`, we make construction (on the free store) convenient.
**Note**: Conventional factory functions allocate on the free store, rather than on the stack or in an enclosing object. **Note**: Conventional factory functions allocate on the free store, rather than on the stack or in an enclosing object.