一、代码
class TestMem {
protected: // 藏起来!
TestMem() { } // 构造函数
~TestMem() { } // 析构函数
public:
static TestMem* Create() { return new TestMem; } // 唯一创建方式
static void Drop(TestMem* p) { delete p; } // 唯一销毁方式
};
二、为什么这么写?
普通类(谁都能动)
TestMem t; // 栈上创建
TestMem* p = new TestMem; // 堆上创建
delete p; // 随便销毁
限制类(只能我允许)
// TestMem t; ❌ 不行!
// TestMem* p = new TestMem; ❌ 不行!
// delete p; ❌ 不行!
TestMem* p = TestMem::Create(); // ✅ 只能这样创建
TestMem::Drop(p); // ✅ 只能这样销毁
三、三句话讲明白
1.构造函数藏起来→ 不能直接new
protected:
TestMem() { }
2.析构函数藏起来→ 不能直接delete
protected:
~TestMem() { }
3.提供两个公共窗口→ 通过静态函数操作
static TestMem* Create() { return new TestMem; } // 创建窗口
static void Drop(TestMem* p) { delete p; } // 销毁窗口
四、为什么要这样?
| 原因 | 说明 |
|---|
| 控制数量 | 防止创建太多对象 |
| 控制时机 | 确保创建/销毁时做必要检查 |
| 防止误操作 | 避免忘记delete或多次delete |