C++中要求(或禁止)對象產(chǎn)生于heap中

字號:

要求對象產(chǎn)生于Heap之中
    考慮如下代碼:
    classHeapClass
    {
     public:
      voidDestory() const {deletethis;}
     private:
      ~HeapClass(){}
    };
    HeapClass* ptr = newHeapClass;
    ptr->Destory();
     這樣的調(diào)用真是很厲害,想生成非Heap對象都不成了。
     對于繼承和組合的情況不想多說了,比較無趣的說。
    判斷某個對象是否位于Heap內(nèi)
     考慮如下代碼:
    newHeapClass(* newHeapClass);
    你覺得編譯器應該怎么做?
     1.調(diào)用operator new
     2.調(diào)用Constructor
     3.調(diào)用第二個operator new
     4.調(diào)用第二個Constructor
     但是可以讓人足夠驚訝,編譯器對此并不做承諾,所以實際的實現(xiàn)可能是:
     1.調(diào)用operator new
     2.調(diào)用第二個operator new
     3.調(diào)用Constructor
     4.調(diào)用第二個Constructor
     而VC6是這樣實現(xiàn)的。
    classHeapClass
    {
     private:
      void* operatornew[](size_tsize);
      typedefconstvoid * RawAddress;
      voidoperatordelete[](void* ptr);
     public:
      voidoperatordelete(void *ptr)
      {
     printf("delete\n");
     ::operatordelete(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;
      }