实现只能在堆上创建对象的类
核心思想:
- 1.构造函数私有化
- 2.提供一个公有的static函数创建对象,该静态成员函数中完成堆对象的创建
- 3.防止拷贝构造
- 可以对拷贝构造函数私有并只声明不实现
- 也可以删除拷贝构造函数的声明(C++11)
class HeapOnly {
public:
static HeapOnly* CreateHeapOnly() {
return new HeapOnly;
}
private:
HeapOnly() {
cout << "HeapOnly()" << endl;
}
//防拷贝: 只声明不实现
//HeapOnly(const HeapOnly& h);
//防拷贝:C++11 删除函数的声明
HeapOnly(const HeapOnly& h) = delete;
};
实现只能在栈上创建对象的类
核心思想:
方法一:
- 1 . 构造函数私有化
- 2 . 提供一个公有的static函数创建对象
class StackOnly {
public:
static StackOnly CreateStackOnly() {
return StackOnly();
}
private:
StackOnly() {
cout << "StackOnly()" << endl;
}
};
方法二:
- 只声明不实现 operator new函数
class StackOnly2 {
private:
void* operator new(size_t size) = delete;
};