new是单目运算符吧。为什么类内重载的new运算符函数有一个形参?
class A
{
public:
void* operator new(size_t size)
{
printf("operator new called/n");
return ::operator new(size);
}
};
类内的单目运算符重载不是应该不带参数吗?
::operator new(size);这个是调用的全局的new函数吗?需要头文件吗?
[解决办法]
new和delete的重载情况还是很复杂滴
它们分为new/delete([]) operator, operator new/delete([])
其中 new/delete([]) operator不允许重载,operator new/delete([])可以重载,返回值必须是void *
第一个参数必须是size_t,另外还可以追加任意多任意类型参数。事实上使用时,你是不需要显式提供第一个size_t类型的参数的,但后面的参数需要显式提供。
operator new有个特殊的版本,叫placement new,它其实就是
void *operator new(size_t size, void *p)版本的operator new,它就是在指定的地址p上构造对象,而不重新分配内存。
[解决办法]
不知道说啥好了。
反正,楼主,还是找effective c++啃吧。
网上的言论误导比正导多的。
[解决办法]
new和delete的重载情况还是很复杂滴
它们分为new/delete([]) operator, operator new/delete([])
其中 new/delete([]) operator不允许重载,operator new/delete([])可以重载,返回值必须是void *
第一个参数必须是size_t,另外还可以追加任意多任意类型参数。事实上使用时,你是不需要显式提供第一个size_t类型的参数的,但后面的参数需要显式提供。
operator new有个特殊的版本,叫placement new,它其实就是
void *operator new(size_t size, void *p)版本的operator new,它就是在指定的地址p上构造对象,而不重新分配内存。
没看到过new delete运算符不能重载的说法。
你说的operator new/delete([])在C++语法中对应什么概念?是函数吗
首先应该了解什么是new operator,什么是operator new, placement new。
new operator 是编译器内置的操作符,就像 + - * / 这些操作符一样,但是
当编译器发现是这些操作符之后肯定会执行一些操作,当看到new 后执行什么呢?
如果不重写operator new,就会调用全局的::operator new(size);
如果在类里面重写了,就会执行重写的。
嗯。这个我也看明白了。
但是对于别的运算符的重载函数,其形参类型都就是运算符的操作数类型。但是new运算符重载函数的形参类型就不是其运算符的操作数类型了。这个该怎么理解?是不是这个根本就不能叫做重载?