方法一:
#include <iostream> using namespace std; class A { public: static A* getInstance(); static void deleteInstance(A** ppA); private: A() { cout << "construct A\n";} ~A() { cout << "destruct A\n"; } }; A* A::getInstance() { return new A; } void A::deleteInstance(A** ppA) { delete *ppA; *ppA = nullptr; } int main() { A* pA = A::getInstance(); A::deleteInstance(&pA); cin.get(); }
其实也就是把构造函数、析构函数private了,这样当想派生一个类时,派生类无法构造一个父类,所以就不行了。
方法二:
#include <iostream> using namespace std; template <typename T> class A { friend T; private: A(int data) : m_data(data) { cout << "construct A. data: " << m_data << endl; } ~A() {} int m_data; }; class B : virtual public A<B> { public: B(int data) : A(data) { cout << "construct B\n"; } ~B() {} }; int main(void) { B b(4); cin.get(); }