注册 登录
编程论坛 C++教室

有关构造函数与new的一些问题

情结 发布于 2008-10-25 13:48, 4925 次点击
首先我提一个问题:构造函数有没有申请内存空间的能力?
一般情况下是当产生一个动态对象时是有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]]
3 回复
#2
debroa7232008-10-25 18:58
Point  * p=new Point();先分配内存空间,是new的事件,再执行构造.
类中有指针,在new 的时候是只知道有个指针,指针这时还没有指向,只是在构造中赋于了一个新分配的地址.这个地址并不在类空间里,所以并没有扩充类对象的大小.可以通过调试跟踪看内存窗口,上例中的字串内容所在内存地址离对象是有一定距离的.
#3
情结2008-10-26 13:00
thank you
#4
lyshyhuangli2008-10-26 19:55
学习了
1