只能在堆上创建对象的思路
- 先将构造函数私有化
- 拷贝构造函数私有化或者用C++11的直接将拷贝构造函数删除
只能在栈上创建对象
- 第一种思路跟只能在堆上创建对象的思路一样
- 第二种因为在堆上创建对象就要用到new的关键字而new的关键字在底层实现的时候需要调用 operator new这个函数 所以直接将这个函数私有化或者删除从而使new关键字不能开辟空间。
#include<iostream>
class StackOnly_2{//只能在栈上开辟空间,这个是直接破坏了new的调用
public:
StackOnly_2(){
}
private:
void* operator new(size_t size) = delete;
void operator delete(void* p);
};
class StackOnly_1{//只能在栈上开辟空间
public:
static StackOnly_1 GetStack_1(){
return StackOnly_1();
}
private:
StackOnly_1(){
}
};
class HeapOnly{//只能在堆上创建对象
public:
static HeapOnly* GetHeap(){
return new HeapOnly;
}
private:
HeapOnly(){}
//HeapOnly(const HeapOnly&);或者下面C++11的
HeapOnly(const HeapOnly&) = delete;//C++11
};
int main(){
HeapOnly *d = HeapOnly::GetHeap();
return 0;
}