您好、欢迎来到现金彩票网!
当前位置:千旺彩票 > 赋值 >

如果类需要析构函数则它也需要赋值操作符和复制构造函数这个规则

发布时间:2019-06-06 17:26 来源:未知 编辑:admin

  如果类需要析构函数,则它也需要赋值操作符和复制构造函数,这个规则常称为三法则。怎么理解呢?

  如果类需要析构函数,则它也需要赋值操作符和复制构造函数,这个规则常称为三法则。怎么理解呢?

  问题来自C++primer中文版第四版413页,就是不理解为什么类需要析构函数它也需要赋值操作符(赋值操作函数)和复制构造函数,希望高手给予解答,最好举个例子来说明,万分感谢还有就是...

  问题来自C++primer中文版第四版413页,就是不理解为什么类需要析构函数它也需要赋值操作符(赋值操作函数)和复制构造函数,希望高手给予解答,最好举个例子来说明,万分感谢

  还有就是有很多例子中都显式定义了析构函数,但也没见其定义赋值/复制构造函数,这又怎么理解呢?展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部1、析构函数的主要功能是释放类实例中申请的动态空间,当不需要析构函数时,只需定义一个没有任何操作的析构函数,如~myclass() {}。不要以为这是“多此一举”,这是养成良好编程习惯的一方面。

  2、如上所说,析构函数的主要功能是处理类实例中申请的动态内存,因为内存是有限资源,不需要的时候理应归还给系统,也许几k字节不会造成重大影响,但如果有众多这样的程序都这样做,累积的结果就有可能造成系统因内存不足而“行动缓慢”。

  由于类的封装性,属性及方法在类内部是公用资源,使编程变得越发简单起来,析构函数也是方法之一,当类实例结束使命后,系统会自动调用析构函数,而不需要人为干预(是祸还是福?)。

  3、当需要重载赋值操作符和复制构造函数时,必然需要申请动态内存,否则就不需要重载赋值操作符和复制构造函数了。

  由于s是指针,编译后只会为保存指针而申请地址,并不会为将要存放的字符串申请空间,那么赋值构造函数中的操作是 STRING ms = Primer C++ Plus;,为了存放字符串,就需要申请动态空间......,,这就是析构函数必须完成释放动态空间的工作,赋值操作符重载也有这样的要求。

  在这个对象销毁的时候你要回收资源,那么free和delete就要写在析构函数中

  b.此外,把析构函数定义为private还可以避免在栈上生成对象,这个是要用到单件的时候。

  那么在你拷贝这个对象的时候,如果使用了默认的拷贝构造函数,那么就只是拷贝了这个指针,而没有拷贝真正的数据,这个叫做浅拷贝,是非常危险的。比如你object1的方向改变了数据,那么拷贝的object2里面的数据也改变。

  b.这个时候,我们就需要重写拷贝构造函数,构造一个新的内存区域,并且把新内存区域的值写为被拷贝区域的值,同时用一个指针指向这个区域。

http://csyuntao.net/fuzhi/450.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有