C 中要求(或禁止)对象产生于heap中

文章作者 100test 发表时间 2007:09:06 12:48:37
来源 100Test.Com百考试题网


  要求对象产生于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 数据类型的属性与限制
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛