| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 388 人关注过本帖
标题:帮忙看一下这段程序的运行过程
只看楼主 加入收藏
落叶深蓝色
Rank: 8Rank: 8
来 自:山东
等 级:蝙蝠侠
帖 子:319
专家分:807
注 册:2010-12-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
帮忙看一下这段程序的运行过程
程序代码:
#include <iostream>
#include <stdlib.h>
using namespace std;
class Obj
{
    public:
    Obj(void)
    {
        cout<<"Initialization"<<endl;
    }
    ~Obj(void)
    {
        cout<<"Destroy"<<endl;
    }
    void In(void)
    {
        cout<<"In"<<endl;
    }
    void Destroy(void)
    {
        cout<<"Destroy"<<endl;
    }

};
    void UseMallocFree(void)
    {
        Obj *a=(Obj *)malloc(sizeof(Obj));
        a->In();
        a->Destroy();
        free(a);
    }
    void UseNewDelete(void)
    {
        Obj *a=new Obj;
        delete a;
    }
int main()
{

    Obj obj;    //
    UseMallocFree();
    UseNewDelete();
}
2011-09-09 15:21
tisyang
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:132
专家分:737
注 册:2011-5-7
收藏
得分:7 
使用 malloc 给类对象分配内存是不安全的,尤其是类本身在实例化的时候需要额外申请内存。
malloc 申请的内存就算赋值给一个类对象指针,这个类对象并不会在这段内存上进行初始化,构造函数和析构函数都不会被调用。

C++ 用无参数构造函数生成对象时候请勿在构造函数后添加无用的那一对括号,否则有可能会被当成函数声明而忽略,嗯,栈上构建的时候就是这样。
2011-09-09 16:28
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:7 
回复 2楼 tisyang
用new对吗?
2011-09-09 19:24
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
收藏
得分:7 
以下是引用laznrbfe在2011-9-9 19:24:49的发言:

用new对吗?

程序结果表明用new是对的。用new的话,会生成一个临时对象,然后将该临时对象的地址赋值(只要有对象的生成,便会有构造函数和析构函数的调用了)。

你运行程序,结果也说明了这一点。。
2011-09-09 22:11
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
收藏
得分:0 
用malloc的不安全性也可以在它的使用过程中体现出来;
Obj *a=(Obj *)malloc(sizeof(Obj));
malloc的返回值其实是void *,用了类型转化才换成对象指针,所以根本无从谈起构造函数和析构函数了。
2011-09-09 22:13
快速回复:帮忙看一下这段程序的运行过程
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016221 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved