如何重载delete操作符?
我在程序里想在一个类里重载delete操作符:
class A
{
...
static void operator delete(void *p) throw();
...
};
....
void A::operator delete(void *p) throw()
{
((A*)p)->~A();
cout << "delete called" << endl;
return;
}
....
int main()
{
A *p;
p=new(A);
....
delete p;
return 0;
}
可是我调用delete时,程序先调用系统的delete,再调用我自己定义的delete。我不是已经把它重载了吗?怎么还会调用系统的delete呢?
如果我改成:
A::operator delete p;
则没有问题,只调用我自己的delete
请问这是怎么回事?
class A
{
...
static void operator delete(void *p) throw();
...
};
....
void A::operator delete(void *p) throw()
{
((A*)p)->~A();
cout << "delete called" << endl;
return;
}
....
int main()
{
A *p;
p=new(A);
....
delete p;
return 0;
}
可是我调用delete时,程序先调用系统的delete,再调用我自己定义的delete。我不是已经把它重载了吗?怎么还会调用系统的delete呢?
如果我改成:
A::operator delete p;
则没有问题,只调用我自己的delete
请问这是怎么回事?
...全文
相关推荐
浅度解析C++运算符重载
(2) 不能重载的操作符:sizeof,., ::, ?:, new, delete, [], ->*。3.
计算机程序员、软件工程师笔试题
八、delete 操作符8.参照 1.5 的代码,下面那一个语句是不安全的?解释:在 C++ 中,delete 操作符只能用于释放动态分配的内存。如果尝试释放一个非动态分配的指针,会导致不确定的行为。
c++基础与提高.pdf
函数重载允许函数有相同的名称,只要它们的参数列表不同即可。操作符重载允许将操作符应用于类的实例。默认参数提供了函数调用时参数的默认值。引用是C++引入的一个新概念,它为变量提供了另一个名字。
C++内存管理技术内幕
1.1.2 控制C++的内存分配- **重载全局的new和delete操作符**:为了实现自定义的内存管理策略,可以重载new和delete,提供自定义的内存分配和释放逻辑,如记录内存使用情况、优化内存碎片等
effective_C++
操作符重载 操作符重载是C++强大的特性之一,它允许程序员给内置操作符赋予新的意义。


