读书人

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

发布时间: 2012-03-20 14:01:11 作者: rapoo

定位操作符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

读书人网 >C++

热点推荐