第18章 特殊工具与技术(4)

18.1.6 类特定的new和delete

编译器看到类类型的new或delete表达式的时候,它查看该类是否有operator new或operator delete成员,如果类定义(或继承)了自己的成员new和delete函数,则使用那些函数为对象分配和释放内存;否则,调用这些函数的标准库版本。

1. 成员new和delete函数

如果类定义了这两个成员中的一个,它也应该定义另一个。

类成员operator new函数必须具有返回类型void*并接受size_t类型的形参。由new表达式用以字节计算的分配内存量初始化函数的size_t形参。

类成员operator delete函数必须具有返回类型void。它可以定义为接受单个void*类型形参,也可以定义为接受两个形参,即void*和size_t类型。由delete表达式用被delete的指针初始化void*形参,该指针可以是空指针。如果提供了size_t形参,就用编译器用第一个形参所指对象的字节大小自动初始化size_t形参。

这些函数隐式为静态函数,不必显式地将它们声明为static,虽然这样做是合法的。成员new和delete函数必须是静态的,因为它们要么在构造对象之前使用(operator new),要么在撤销对象之后使用(operator delete),因此,这些函数没有成员可操纵。像任意其他静态成员函数一样,new和delete只能直接访问所属类的静态成员。

2. 数组操作符new[]和操作符delete[]

也可以定义成员operator new[]和operator delete[]来管理类类型的数组。如果这些operator h

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值