C++中的new和delete
C++中的new和delete
程序生涯中总有这样的时刻,解决了复杂的问题,然后觉得自己技术的逼格提高了。这时,突然有个人问,什么是表达式,什么是操作符,new是表达式还是操作符。。。我擦!这种感觉,宛若一盆冷水瞬间摧残了我傲娇的内心。。。
操作数
表达式操纵的值。
操作符
决定表达式执行什么功能的符号。C++ 语言定义了一组操作符以及将它们用于内置类型时的含义,还定义了每个操作符的优先级和结合性以及它们所需要的操作数个数。C++ 语言允许重载操作符,以使它们能用于类类型的对象。
表达式
C++程序中的最低级的计算。表达式通常将一个操作符用于一个或多个操作数。每个表达式产生一个结果。表达式也可用作操作数,因此可用多个操作符编写复合表达式。
+ 由一个或多个操作数通过操作符组合而成。
+ 最简单的表达式仅包含一个字面值常量或变量。
+ 较复杂的表达式则由操作符以及一个或多个操作数构成。
+ 每个表达式都会产生一个结果。
+ 如果表达式中没有操作符,则其结果就是操作数本身(例如,字面值常量或变量)的值。
+ 当一个对象用在需要使用其值的地方,则计算该对象的值。
new在哪里?
当在程序中写下int* pInt = new int
时实际上是int* pInt = ::new int
,这里的new是C++中的一个操作符,operator new
实际上在文件new中的诺干个全局函数。
C:\Program Files\Microsoft Visual Studio 10.0\VC\include\new (7 hits)
Line 27: // handler for operator new failures
Line 51: _Ret_bytecap_(_Size) void *__CRTDECL operator new(size_t _Size) _THROW1(_STD bad_alloc);
Line 55: inline void *__CRTDECL operator new(size_t, void *_Where) _THROW0()
Line 67: inline void *__CRTDECL operator new[](size_t, void *_Where) _THROW0()
Line 79: _Ret_bytecap_(_Size) void *__CRTDECL operator new[](size_t _Size)
Line 84: _Ret_opt_bytecap_(_Size) void *__CRTDECL operator new(size_t _Size, const _STD nothrow_t&)
Line 87: _Ret_opt_bytecap_(_Size) void *__CRTDECL operator new[](size_t _Size, const _STD nothrow_t&)
C++内置类型:C++语言自定义的类型 函数:声明,定义,函数体(以花括号开始并且以花括号结束的语句块)
我觉得使用MD来记录笔记的好处就是,可以过几个月回过来看,看到自己写的玩意毫无用处的时候可以重新修改。2014/02/14
include
ifdef _DEBUG
define new DEBUG_NEW
else
define RELEASE_NEW ::new(std::nothrow)
define new RELEASE_NEW
endif
不要重新定义全局的new,会导致未知问题,因此,对new的定义只能在每一个cpp中复制一份。