日期:2011-03-22 13:55:00 来源:本站整理
C++中要求(或禁止)对象产生于heap中[VC/C++编程]
本文“C++中要求(或禁止)对象产生于heap中[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
要求对象产生于Heap之中
考虑以下代码:
classHeapClass
{
public:
voidDestory() const {deletethis;}
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;
voidoperatordelete[](void* ptr);
public:
voidoperatordelete(void *ptr)
{
printf("delete
");
::operatordelete(ptr);
m_address.erase(std::remove(m_address.begin(),m_address.end(),ptr),m_address.end());
return;
}
void* operatornew(size_tsize)
{
printf("new
");
void * ptr = ::operatornew(size);
m_address.push_back(ptr);
returnptr;
}
HeapClass()
{
printf("Constructor!
");
}
HeapClass(constHeapClass&)
{
printf("copy Constructor!
");
}
virtualvoidDestory() const {deletethis;}
virtual ~HeapClass() = 0;
boolisOnHeap() const
{
// const void * rawAddress = dynamic_cast<const void *>(this);
constvoid * rawAddress = (constvoid *)(this);
std::deque<RawAddress>::iteratoriter = std::find(m_address.begin(),m_address.end(),rawAddress);
returniter != m_address.end();
}
private:
staticstd::deque<RawAddress> m_address;
};
HeapClass::~HeapClass(){}
std::deque<HeapClass::RawAddress> HeapClass::m_address;
classDHeapClass:publicHeapClass
{};
我在VC6中写了这个Demo测试了一下,但是const void * rawAddress = dynamic_cast<const void *>(this);会呈现非常,这让我认为很忧郁,所以这个Demo只能支持普通的担当方法,不支持多种担当和虚拟担当.
禁止对象产生于heap之中
考虑以下代码:
classHeapClass
{
private:
void* operatornew(size_tsize);
void* operatornew[](size_tsize);
voidoperatordelete(void *ptr);
voidoperatordelete[](void* ptr);
public:
HeapClass(){printf("Constructor!
");}
HeapClass(constHeapClass&){printf("copy Constructor!
");}
public:
~HeapClass(){}
};
这确切是对比简单的事情.
以上是“C++中要求(或禁止)对象产生于heap中[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论