入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

C++随笔 delete void *

创建时间:2015-01-30 投稿人: 浏览次数:133

用了这么久的C++,才发现C++是目前所有的编成语言中最为复杂的一种,C++之路,   艰难.....

       delete void *

       这一操作对于一些简单的系统内建类型不会有问题,但如果void*所指向的对象在析构函数里要释放,进行此造作会丢失内存,因为它不执行析构函数,例如:              
class CEntity
{
public:
    CEntity(char flag);
    ~CEntity();
private:
    void * m_data;
   char   m_flag;
};

CEntity::CEntity(char flag)
{
    m_flag = flag;
    cout<<"constructing entity "<<m_flag<<endl;
    m_data = new char[100]; 
}

CEntity::~CEntity()
{
    cout<<"destructing entity "<<m_flag<<endl;
    delete[] m_data;
}

以上这个类是没什么问题的,但是看以下的调用:
int main(int argc, char* argv[])
{
       CEntity * a = new CEntity("a");
       delete a;

       void * b = new CEntity("b");
       delete b;
 
       return 0;
}

其输出为: constructing entity a
                     destructing entity a
                     constructing entity b                                    
可见,delete b 的时候没有释放m_data所指向的内存,没有执行析构函数。

转自:http://www.cppblog.com/erran/archive/2006/05/20/7450.html

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像