首页 > 其他 > 详细

创建对象方法

时间:2020-02-17 21:19:18      阅读:69      评论:0      收藏:0      [点我收藏+]

1.   ClassName object(param); 

   这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。
注意:为节省存储空间,C++创建对象时仅分配用于保存数据成员的空间,而类中定义的成员函数则被分配到存储空间中的一个公用区域,由该类的所有对象共享。这种方法创建的对象,内存分配是分配到栈中的,由C++缺省创建和撤销,自动调用构造函数和析构函数

     如果程序中没有提供任何构造函数,则编译器会为程序定义一个默认构造函数。否则,必须自己定义构造函数;如果自己声明了构造函数,就要定义此构造函数,并使用该构造函数创建对象。

     该方法创建的对象调用类方法时,必须用“.”,而不能用“->”。

2.    ClassName *object = new ClassName(param);
  delete object;
  这种方法跟java有点类似,相同的是,它们都是在堆上分配内存来创建对象的(与上不同);不同的是,C++用new创建对象时返回的是一个对象指针,object指向一个ClassName的对象,C++分配给object的         仅仅是存放指针值的空间。而且,用new 动态创建的对象必须用delete来撤销该对象。只有delete对象才会调用其析构函数。
  注意:new创建的对象不是用“*”或“.”来访问该对象的成员函数的,而是用运算符“->”;

  一般来说,编译器将内存分为三部分:静态存储区域、栈、堆。静态存储区主要保存全局变量和静态变量,栈存储调用函数相关的变量、地址等,堆存储动态生成的变量。在c中是指由malloc,free运算产生释放的存储空间,在c++中就是指new和delete运算符作用的存储区域。

3.   在构造函数中使用new:

  注意问题:

      如果在构造函数中使用new来初始化指针成员,则应在析构函数中使用delete。

      new和delete相互兼容,new对应delete,new[]对于delete[]。

      若有多个构造函数,则必须以相同的方法使用new,要么都带中括号,要么都不带。

      用于定义一个复制构造函数,通过深度复制将一个对象初始化为另一个对象,应该分配足够的空间来存储复制的数据,并复制数据,而不仅仅是数据的地址。

      应当定义一个赋值运算符,通过深度复制,将一个对象复制给另一个对象。

String::String(const String & st)
{
    num_strings++;
    len = st.len;
    str = new char[len+1]:
    std::strcpy(str, st.str);
}

String & String ::operator=(const String & st)
{
    if (this == &st)
        return *this;
    delete[] str;
    len = st.len;
    str = new char[len + 1];
    std::strcpy(str, st.str);
    return *this;
}

 

创建对象方法

原文:https://www.cnblogs.com/zxjcoming/p/12323460.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!