首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

定位操作符new()的有关问题

2012-03-20 
定位操作符new()的问题classScreen{public:void*operatornew(size_t)void*operatornew(size_t,Screen*)/

定位操作符new()的问题
class   Screen   {
public:
void   *operator   new(   size_t   );
void   *operator   new(   size_t,   Screen*   );
//   ...
};
额外的参数可以被new   表达式中指定的定位实参初始化例如
void   func(   Screen   *start   )   {
Screen   *ps   =   new   (start)   Screen;
//   ...
}

大家帮我看看这个什么意思:“new   (start)   Screen;


[解决办法]
创建一个Screen ,并把它放入从 start (地址) 开始的一个大小为 sizeof(Screen) 大小的内存空间中.
[解决办法]
“new (start) Screen;”
这是定位new操作

Screen *ps = new (start) Screen;
表示在已经开辟好的内存区start中为堆对象Screen申请一个内存

也就是说,如果start占100个字节
你现在从它的第1个字节开始,往里面写入Screen

这样做今后要释放内存的时候有麻烦,如果Screen里面有指针,并开辟了空间,那么delete ps会调用析构函数,而start中的那块内存也丢失了,因为ps也指向了start.所以要避免这种情况,就要先ps-> ~Screen()这样显示的调用Screen的析构函数,再delete []start

热点排行