0

我正在实施一项新功能。

我有一个带有布尔变量的简单类。我没有在其中实现 operator= 功能。尽管如此,当我使用 operator = 复制对象时,值正在被复制。

你能解释一下它是如何工作的吗?不写这个函数有多安全,因为在我的应用程序中,很多时候,我将使用运算符'='复制这些对象

#include <iostream>
using namespace std;
class A
{
    public:
    bool abc;
    bool xyz;
};
int main()
{
  A obj1, obj2;
  obj1.abc = true;
  obj1.xyz = false;

  obj2 = obj1;

  cout<<"obj2 abc: "<<obj2.abc<<endl; //How do the values got copied?
  cout<<"obj2 xyz: "<<obj2.xyz<<endl;

}
4

2 回答 2

2

如果您的班级不管理资源,那是安全的。默认operator =执行逐个成员复制。这是一个浅拷贝,因此所有可访问的成员都operator =将被正确复制。

如果该类正在管理资源(动态内存、流、句柄等),则默认值是不安全的 - 请参阅规则三

于 2013-01-18T12:27:33.027 回答
0

如果您在类中不使用动态或其他资源内存,则可以使用赋值运算符的默认实现。但是,如果不是这种情况,例如您有一个使用动态分配内存的成员,这将是不安全的并且可能会产生意想不到的影响。

于 2013-01-18T12:30:17.077 回答