new delete
来源:互联网 发布:潭州淘宝旗舰店靠谱吗 编辑:程序博客网 时间:2024/05/08 01:06
我们可以通过重新定义operator new()和operator delete(),通过这种方式来接办存储管理工作,然而取代全局的
operator new()、operator delete()并不可取。这些函数可能已经有了其它版本,也可能默认行为的某些方面已经被其它行为所依赖。一种更可取的方式是为一个特定的类提供这些操作,为其本身及其子类提供特殊的分配器和释放器。
类的void* operator new(size_t)、void operator delete(void*,size_t)默认为static成员,因此它们没有this指针,也不会修改任何对象。它们将提供一些存储,供构造函数进行初始化,而后由析构函数去处理。
析构函数最好实现为虚析构函数,这样对基类指针执行delete就可以删除该指针实际指向的对象 。sizeof(Manager)使得不用在专用分配器中
也存储这些信息。专用分配器可以存储这些信息,并忽略提供给operator delete()的size_t参数。
class Manager: public Employee
{
int lever;
};
void f()
{
Employee* p = new Manager;
delete p;
}
此时编译器无法得到正确的大小,就像删除数组一样,用户必须提供一些帮助。这些可以为Employee提供一个虚析构函数来解决。
这样就能保证每个由它派生的类提供一个析构函数,释放工作在析构函数(它知道大小)中完成。
在实际中这涉及到编译器的实现方式:
分配工作由(编译产生的)下述调用完成
Employee::operator new(sizeof(Manager));
而释放由(编译产生的)下述调用完成
Employee::operaotr delete(p,sizeof(Manager)):
构造函数不能是虚的,要构造一个函数,构造函数必须知道所创建对象的确切类型,因此构造函数不能是虚的。同时因为它是以常规函数所
没有的方式,因此你不能有一个到构造函数的指针。
- new/delete
- new delete
- new & delete
- new delete
- new/delete
- new & delete
- new delete
- new delete
- new/delete
- new delete
- new & delete
- new && delete
- new delete
- new delete
- new delete
- new、delete
- new, delete 和 new[] delete[]
- new&delete 与 new[]&delete[]
- InstantiationException 异常原因
- 不通过扩展名判断图像文件格式
- LEACH和LEACH-C仿真冲突
- LEACH协议代码的两个BUG
- InnoDB与MyISAM的六大区别
- new delete
- AXI CUP资源列表
- Ajax链接服务器步骤
- LEACH仿真问题处理与解析(1)
- 关于张老师java视频的学习(十三)
- 用eclipse开发php
- LEACH&LEACH-C 仿真分析(2)
- QT 备忘1
- LEACH&LEACH-C仿真分析(3)