C++中一些基本概念

来源:互联网 发布:阿里云合作伙伴有哪些 编辑:程序博客网 时间:2024/05/11 08:49


//作者:ylotttt

//来源:http://blog.csdn.net/ylotttt/

1、构造函数与拷贝构造函数
      调用的时机:
              构造函数在对象定义(即对象建立)时调用。
              拷贝构造函数在用一个对象初始化另一个对象和用对象作为参数时调用。
      具体动作:
              构造函数负责创建对象(申请资源——什么资源?),同时也提供了初始化对象的机会(具体如何初始化由你决定)。
              拷贝构造函数提供用一个已有对象初始化另一个对象的机会(具体如何初始化由你决定)。


2、默认构造函数与默认拷贝构造函数
      调用的时机:
              默认构造函数在对象定义(即对象建立)并且程序员没有定义构造函数时调用。C++语言要求此时存在一个默认构造函数(当然这些要求都是由编译器具体完成和实现,每一个语言的特性都是由编译器来实现的)用以创建对象。
              默认拷贝构造函数在用一个对象初始化另一个对象和用对象作为参数并且程序员没有定义默认拷贝构造函数时调用。
      具体动作:
              默认构造函数只负责创建对象(申请资源),而不做任何初始化。
              默认拷贝构造函数只是用已有对象来复制一个新对象(即一个成员一个成员的复制,此时具体的初始化不在由你说了算,因为你已放弃了这项权利),如果成员是类对象,则调用其拷贝构造函数或默认构造函数。


3、浅拷贝与深拷贝

     什么浅拷贝什么深拷贝让他们统统见鬼去吧,从现在起抛掉这两个让人头晕的概念从新来过。

     在默认拷贝构造函数中,拷贝的策略是逐个成员拷贝,其数据成员严格按值传递的。请务必抛掉那种按值传递就是a变量中的5传到了b变量中的简单想法。也存在把a变量指向c通过按值传递使b变量也指c(此时变量为指针变量),而这就是大名鼎鼎的、耐人寻味的、令人糊涂的浅拷贝(只因为他没有拷贝资源)。这样在析构时就会发生两次删除c的情况,显然第二次是错的(当然在你自己定义的构造函数中你也有可能犯同样的错误,如果你犯了,那你要好好自责一下了,哈哈)。为了避免这样的错误我们必须明确给出拷贝构造函数,并且指明在构造新对象时要构造出全新的对象,拥有自己想拥有的全新资源,而不是与被拷贝共享。而这就是大名鼎鼎的、耐人寻味的、令人糊涂的深拷贝(只因为他也拷贝了资源)。

    在C++的语言定义中并没有以上两个概念(这两概念的提出者如果出发点是帮助理解,那就有情可原。如果出发点是就要独树一帜,搞个新概念,搞个名场,就应该把他(她)拉出去J了!!!!)。

 

 另:昨天玩玩了csdn,还真是个好东西,哈哈

 以前没玩,浪费了。

 

原创粉丝点击