//C++ Primer
1,The library function operator new and operator delete are misleadingly named. Unlike other operator functions,such as operator=,these functions do not overload the new or delete expressions.In fact,we cannot redefine the behavior of the new and delete expressions.
A new expression executes by calling an opearot new function to obtain memory and then construct an object in that memory.A delete expression executes by destroying an object and then calls an operation delete function to free the memory used by the object.
2,默认情况下,new表达式通过调用由标准库定义的operator new版本分配内存。通过定义自己的名为operator new和operator delete的成员,类可以管理用于自身类型的内存。
编译器看到类类型的new或delete表达式的时候,它查看该类是否是operator new或operator delete成员,如果类定义(或继承)了自己的成员new和delete函数,则使用那些函数为对象分配和释放内存;否则,调用这些函数的标准库版本。
优化new和delete的行为的时候,只需要定义operator new和operator delete的新版本,new和delete表达式自己照管对象的构造和撤销。
3,如果基类有virtual析构函数,则传给operator delete的大小将根据被删除指针所指对象的动态类型而变化;如果基类没有virtual析构函数,那么,通过基类指针删除指向派生类对象的指针的行为,跟往常一样是未定义的。
4,成员new和delete函数(operator new和operator delete)必须是静态的,因为它们要么在构造对象之前使用(operator new),要么在撤销对象之后使用(operator delete),因此,这些函数没有成员数据可以操纵。像任何其他静态成员函数一样,operator new和operator delete只能直接访问所属类的静态成员。
5,如果类定义了自己的成员new和delete,类的用户就可以通过使用全局作用域确定操作符,强制new或delete表达式使用全局的库函数。如果用户编写:
Type* p=::new Type;
::delete p;
那么,即使类定义了自己的类特定的operator new,也调用全局的operator new;delete类似。
阅读(1998) | 评论(0) | 转发(0) |