Use code such as this to prevent subclasses from deriving from a base class:
class myclass; class my_lock { friend class myclass; private: my_lock() {} my_lock(const my_lock&) {} }; class myclass : public virtual my_lock { // ... public: myclass(); myclass(char*); // ... }; myclass m; class Der : public myclass { }; Der dd; // error Der::dd() cannot access // my_lock::my_lock(): private member