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 =が正しくコピーされます。

クラスがリソース (動的メモリ、ストリーム、ハンドルなど) を管理している場合、デフォルトは安全ではありません - 3 つのルールを参照してください。

于 2013-01-18T12:27:33.027 に答える
0

クラスで動的または他のリソース メモリを使用しない場合は、代入演算子の既定の実装を利用できます。ただし、そうではなく、たとえば、動的に割り当てられたメモリを使用するメンバーがある場合、これは安全ではなく、予期しない影響を与える可能性があります。

于 2013-01-18T12:30:17.077 に答える