如何在指定的内存区域 new 一个对象

  #include   "stdafx.h"  
  #include   "iostream.h"  
   
  class   A  
  {  
  public:  
  A()   {cout<<"A()"<<endl;}  
  ~A()   {cout<<"~A()"<<endl;}  
          void*   operator   new   (size_t   size,void*   pBuffer)  
  {  
          cout<<"A::new"<<endl;  
  return   pBuffer;  
  }  
  void   A1()   {cout<<"A1()"<<endl;}  
  };  
   
  int   main(void)  
  {  
  char   pBuffer[1024];  
  A*   a=new   (pBuffer)   A;  
  a->A1();  
  a->~A();  
  return   0;  
  }  
   
  运行结果  
  A::new  
  A()  
  A1()  
  ~A()  
   
  这才正确,呵呵,前面写错了点,不好意思  
  这个程序编译有一个报警  
  warning   C4291:   'void   *__cdecl   A::operator   new(unsigned   int,void   *)'   :   no   matching   operator   delete   found;   memory   will   not   be   freed   if   initialization   throws   an   exception  
                  C:/VCWork/memObjTest/memObjTest.cpp(12)   :   see   declaration   of   'new'  
  说的是没有与异型new对应的delete,不要去管他就是了,因为这种调用法,最重要的就是不能用delete清除对象,否则,内存指针在对象清除时就被清除了,而推出函数时,自动释放pBuffer时,因为这块内存已经标记清除,肯定出错  
   
  很多C++的书籍说,显式调用析构函数是一个高级话题,说的就是这种情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值