标题:有关构造函数与new的一些问题
只看楼主
情结
Rank: 1
来 自:湖北武汉
等 级:新手上路
帖 子:19
专家分:0
注 册:2008-10-19
 问题点数:0 回复次数:3 
有关构造函数与new的一些问题
首先我提一个问题:构造函数有没有申请内存空间的能力?
一般情况下是当产生一个动态对象时是有new来产生的,而构造函数只是对对象进行初始化,也就是先有new来申请存储对象的内存空间,然后执行构造函数对对象进行初始化,
             《有些书上比较间接的说明构造函数有申请内存空间的能力》
第一:
                   class  Point{   } ;   //省去类体部分,只说明Point为一个类
                   Point  * p=new Point();
                 所产生的对象的内存空间是new申请的还是构造函数申请的,
                 如果是new申请的,那构造函数只是对对象进行初始话,没有对存储对象的空间做什么;
                 如果是构造函数申请的,那new作为一个函数又有什么用呢?难道只是返回一个指针而已吗?
第二:
                  class  Point
                    {
                      string  *  p;
                       .....
                       ......
                       ......
                    };
                   Point:: Point(Point& )      //   深拷贝
                         {
                             Delete  p;
                             p=new string [20];
                         }
             当类里面有指针的情况下,采用深拷贝的到的对象的空间比采用浅拷贝的空间要大一个数据项,
这是否意味着构造函数对对象的大小进行了扩充???

[[it] 本帖最后由 情结 于 2008-10-25 17:29 编辑 [/it]]
搜索更多相关主题的帖子: 函数 构造 new 
2008-10-25 13:48
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
得分:0 
Point  * p=new Point();先分配内存空间,是new的事件,再执行构造.
类中有指针,在new 的时候是只知道有个指针,指针这时还没有指向,只是在构造中赋于了一个新分配的地址.这个地址并不在类空间里,所以并没有扩充类对象的大小.可以通过调试跟踪看内存窗口,上例中的字串内容所在内存地址离对象是有一定距离的.
2008-10-25 18:58
情结
Rank: 1
来 自:湖北武汉
等 级:新手上路
帖 子:19
专家分:0
注 册:2008-10-19
得分:0 
thank you

天行健,君子以自强不息
2008-10-26 13:00
lyshyhuangli
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-7-24
得分:0 
学习了
2008-10-26 19:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-240485-1-1.html




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

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