C++中要求(或禁止)对象产生于heap中
对象需求在堆中生成。
考虑以下代码:
class heap class
{
public:
void destory()const { delete this;}
private:
~ heap class(){ }
};
heap class * ptr = new heap class;
ptr-> Destory();
这种调用太强大了,不可能生成非堆对象。
关于继承和结合,我不想多说,但是很无聊。
确定对象是否位于堆中
考虑以下代码:
newHeapClass(* newHeapClass);
你觉得编译器应该怎么做?
1.呼叫接线员新
2.调用构造函数
3.称第二个操作员为新操作员
4.调用第二个构造函数
但是令人惊讶的是,编译器并不这样做,所以实际的实现可能是:
1.呼叫接线员新
2.称第二个操作员为新操作员
3.调用构造函数
4.调用第二个构造函数
VC6就是这样实现的。
classHeapClass
{
private:
void * operator new[](size _ tsize);
typedefconstvoid * raw address;
void operator delete[](void * ptr);
public:
voidoperatordelete(void * ptr)
{
printf(" delete \ n ");
::operator delete(ptr);
m _ address . erase(STD::remove(m _ address . begin()、m_address.end()、ptr)、m _ address . end());
退货;
}
void * operator new(size _ tsize)
{
printf(" new \ n ");
void * ptr =::operator new(size);
m _ address . push _ back(ptr);
return ptr;
}
0条评论