设计一个类,只能在栈/堆上创建对象

设计一个类,只能在栈/堆上创建对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class HeapOnly {
public:
static HeapOnly* CreateObject() {
return new HeapOnly;
}
private:
// 将构造函数私有化
HeapOnly() {}
// 防拷贝
HeapOnly(const HeapOnly&);
// 防拷贝C++11写法
// HeapOnly(const HeapOnly&) = delete;
};

class HeapOnly {
public:
HeapOnly() {}
void Destory() { delete this; }
private:
// 如果类的析构函数是私有的,则编译器不会在栈空间上为类对象分配内存
~HeapOnly() {}
};

class StackOnly {
public:
static StackOnly CreateObject() {
return StackOnly();
}
private:
StackOnly() {}
};

class StackOnly {
public:
StackOnly() {}
private:
void* operator new(size_t size);
void operator delete(void* p);
};