要求对象产生于Heap之中
考虑如下代码:
classHeapClass
{
public:
voidDestory() const {0deletethis.}
private:
~HeapClass(){}
}.
HeapClass* ptr = newHeapClass.
ptr->Destory().
这样的调用真是很厉害,想生成非Heap对象都不成了。
对于继承和组合的情况不想多说了,比较无趣的说。
判断某个对象是否位于Heap内
考虑如下代码:
newHeapClass(* newHeapClass).
你觉得编译器应该怎么做?
1.调用operator new
2.调用Constructor
3.调用第二个operator new
4.调用第二个Constructor
但是可以让人足够惊讶,编译器对此并不做承诺,所以实际的实现可能是:
1.调用operator new
2.调用第二个operator new
3.调用Constructor
4.调用第二个Constructor
而VC6是这样实现的。
classHeapClass
{
private:
void* operatornew[](size_tsize).
typedefconstvoid * RawAddress.
voidoperator0delete[](void* ptr).
public:
voidoperator0delete(void *ptr)
{
printf("0delete\n").
::operator0delete(ptr).
m_address.erase(std::remove(m_address.begin(),m_address.end(),ptr),m_address.end()).
return.
}
void* operatornew(size_tsize)
{
printf("new\n").
void * ptr = ::operatornew(size).
m_address.push_back(ptr).
returnptr.
}
相关文章
基础知识:网络专业术语的通俗形象解释
更加实用网易163邮箱极速3.0更新
网络基础内部网关协议和外部网关协议
什么是SOCK5代理,什么是HTTP代理
C 中要求(或禁止)对象产生于heap中
VC 中利用_GS开关防止缓冲区溢出
C :最强大的.NET语言之内存与资源
C :最强大的.NET语言之对象构造
C 数据类型的属性与限制
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛