2 zay999abc zay999abc 于 2015.06.15 16:48 提问

如何判断一个类能否安全地依赖于拷贝和赋值操作的默认版本?为什么?

初学C++,在书上看到的习题。如果有什么好的建议也请不吝赐教

3个回答

oyljerry
oyljerry   Ds   Rxr 2015.06.15 19:28
已采纳

如果你的类成员都是基本数据类型,比如int,byte,char等,那么就可以依赖默认版本
比如一般定义结构体,我们一般没有提供自己额外的拷贝构造函数等
但是对于类,一般还是自己实现,因为你不知道将来是不是会增加新的数据类型

zay999abc
zay999abc 谢谢。
大约 3 年之前 回复
ycg514230
ycg514230   Rxr 2015.06.15 17:32

如果一个类所有的成员都是能够调用默认构造函数,那么他就可以安全的依赖于拷贝和赋值的默认版本。
还有需要注意的是,如果有指针成员,则需要看具体情况,是否需要copy指针指向的对象。

希望能够帮到你。

zay999abc
zay999abc 谢谢。
大约 3 年之前 回复
holle_word
holle_word   2015.06.15 16:55

???
看不懂问题

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C++Primer习题第七章
练习7.1:使用2.6.1节练习定义的Sales_data类为1.6节的交易处理程序编写一个新的版本。
C++笔记之为什么一个类定义了析构函数就几乎肯定要定义拷贝构造函数和拷贝赋值运算符
这个问题本来很简单,但是时间久了就容易忘,所以做个笔记用来提示下自己 先来看看这样一个类: class HasPtr { public: HasPtr(const string& s = string()) :ps(new string(s)), i(0) {} ~HasPtr() { delete ps; } private: string * ps; int i;
禁止类的拷贝构造函数和复制构造函数(转)
什么时候需要拷贝构造函数和赋值构造函数? 每个C++类只有一个析构函数,但可以有多个构造函数和多个赋值函数。其中构造函数包括默认构造函数(无参,或参数全有默认值),拷贝构造函数。在编程时,如果程序员不显式声明和定义上述函数,编译器将自动产生4个public inline的默认函数。形式为: A(); A(const A&); A& operator=(const A& a); ~A();
默认拷贝构造函数&默认赋值操作
<br />做了一道题,错了。收藏下:#include <iostream>  #include <cstdlib>    using namespace std;    class Person  {  public:      virtual void Say()      {          cout << "我是个人." << endl;      }            ~Person()      {          cout << "别了..." << endl;      }  }; 
C++IO对象不可复制或赋值
IO类型的3个独立的头文件: iostream定义读写控制窗口的类型, fstream 定义读写已命名文件的类型,             (包含fstream类) sstream定义读写存储在内存中的string对象。(包含了stringstream类) IO类型不可复制或赋值 因此,IO类型不可存储在vector容器中。(IO是流对象,而流对象是不能复制的
C++三法则:如果需要析构函数,则一定需要拷贝构造函数和赋值操作符
C++三法则:如果需要析构函数,则一定需要拷贝构造函数和赋值操作符 如何理解这句话,首先,从“如果需要析构函数”这里我们知道,类中必然出现了指针类型的成员(否则不需要我们写析构函数,默认的析构函数就可以用了),所以,我们需要自己写析构函数来释放给指针所分配的内存来防止内存泄露,那么为什么说“一定需要拷贝构造函数和赋值操作符”呢,原因还是这样:类中出现了指针类型的成员。有指针类型的成员,我们必须防
C++如何彻底禁止掉对象的复制操作
在面向对象的世界中,有一些对象是需要
C++如何禁止掉对象的复制操作
最容易想到的是将拷贝构造函数与赋值函数声明为private。但是,private只是说外部不能直接调用,但是可以间接通过类的成员函数来调用(通过成员函数与友元函数对其访问)。那么怎么办呢? ----》在类中,允许声明函数,但是,可以不用实现该函数,这是合法的。那么即使是在public中声明函数,但是不实现,那么调用这个函数也是会出错的,直接在编译器error。 那么好了我们可以特性一起
一个类如何防止被拷贝
Effective C++:条款06   若不想使用编译器自动生成的函数,就该明确拒绝 . 老式写法: class noncopyable { protected: noncopyable() {} ~noncopyable() {} private: noncopyable( const noncopyable& ); n
如何禁止C++ 类支持拷贝
如何禁止C++ 类支持拷贝 C++ 编译器默默地为你做了不少工作 当你写下 class Empty {}; //其实等价于 class Empty { public: Empty() { ... } //default constructor Empty(const Empty &rhs) { ... } //copy constructor ~Empty() { ...