控制C++的类只能在堆分配或只能在栈分配
来源:互联网 发布:淘宝客交易成功后退款 编辑:程序博客网 时间:2024/06/07 05:26
//HeapOnly.cpp
#include <iostream>
using namespace std;
只能在堆上分配空间:我们可将类的析构函数用private来修饰,也就是把析构函数私有化,因为自动变量与静态变量的对象都在释放空间的时候都需要访问析构函数。若析构函数私有,外面就不能调用,这时候会产生编译错误,这样就达到了只能在堆上分配空间了。但是,把析构函数私有化,那么我们就不能调用delete了, 因为它也需要访问析构函数。这就要求我们自己去提供回收内存空间的函数,以防内存泄漏。
class HeapOnly
{
public:
HeapOnly() { cout << "constructor." << endl; }
void destroy () const { delete this; }
private:
~HeapOnly() {}
};
int main()
{
HeapOnly *p = new HeapOnly;
p->destroy();
// HeapOnly h;
// h.Output();
return 0;
}
//StackOnly.cpp
//2005.07.18------2009.06.05
#include <iostream>
using namespace std;
只能在栈上分配空间:可将 T:: operator new 全部私有,因为要在堆上分配空间,需要用到new来实现,当你把new私有化,我们就不能调用new T()这样的语句,这样可以达到只能在栈上来分配空间了。
class StackOnly
{
public:
StackOnly() { cout << "constructor." << endl; }
~StackOnly() { cout << "destructor." << endl; }
private:
void* operator new (size_t);
};
int main()
{
StackOnly s; //okay
StackOnly *p = new StackOnly; //wrong
return 0;
}
在类设计中,类的成员如果是在栈中,那么也需要显识地在类的析构函数中调用成员的析构函数,否则就会造成内存泄露
- 控制C++的类只能在堆分配或只能在栈分配
- 只能在堆上分配空间的类和只能在栈上分配空间的类
- 怎么限制一个类的对象实例,只能在"堆"上分配,或者只能在"栈"上分配
- [C++] 分别设计只能在栈, 堆中分配内存的类!
- 类对象只能在堆上分配空间的方法
- C++限制一个类只能在堆上或栈上分配
- 实例化类,怎么限制只能在堆或栈分配!
- 编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配
- 编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配。
- 编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配
- 编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配
- [面试] 编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配 (Very Good! tx)
- 编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配(腾讯2012面试题)
- 如何让类对象只能在堆(栈)上分配空间
- C++常见知识点复习-如何限制类对象只能在堆上或者栈上分配
- [C++]限制一个类的对象只能在栈或堆上创建
- C++只能在堆上或只能在栈上创建累的对象
- calloc或new分配的数组只能在第一个元素上释放
- 新人入职环境配置
- Java回调机制解读
- Maven为何使用镜像
- 开始学习JavaScript啦
- c++ boost 文件读取写入 逗号隔开的字符串
- 控制C++的类只能在堆分配或只能在栈分配
- 《ReactNative》之sqlite(react-native-sqlite-storage)
- sublime text3 配置node环境在path中找不到node的解决
- 安卓实用开发小知识 1704
- 通达OA 管理员菜单突然消失的问题处理及缓存清除代码(图文)
- ajaxStart() 和ajaxStop()的方法
- 三孔插头三根线的区分
- Java 静态变量生命周期
- CSS3阴影 box-shadow的使用和技巧总结