C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でのオブジェクトコピーの防止


C ++では、クラスが作成されるときに、コピーコンストラクターまたは代入演算子を使用してクラスをコピーできます。このセクションでは、C++でクラスのオブジェクトコピーを防ぐ方法を説明します。オブジェクトのコピーを防ぐために、いくつかのルールに従うことができます。これらは以下のようなものです。

1.プライベートコピーコンストラクターとプライベート代入演算子を作成します。

#include <iostream>
using namespace std;
class MyClass {
   int x;
   public:
      MyClass() {
         //non-parameterized constructor
      }
      MyClass(int y): x(y) {
      }
   private:
      MyClass(const MyClass& obj) : x(obj.x) {
         //private copy constructor
      }
      MyClass& operator=(const MyClass& tmp_obj) {
         //private assignment operator (overloaded)
            x = tmp_obj.x;
         return *this;
      }
   };
 main() {
   MyClass ob(50);
   MyClass ob2(ob); // calls copy constructor
   ob2 = ob; // calls copy assignment operator
}

出力

[Error] 'MyClass::MyClass(const MyClass&)' is private
[Error] within this context
[Error] 'MyClass& MyClass::operator=(const MyClass&)' is private
[Error] within this context
>

2.プライベートコピーコンストラクタとプライベート代入演算子を使用してダミークラスを継承します。

#include <iostream>
using namespace std;
class DummyClass {
   public:
      DummyClass() {
      }
   private:
      DummyClass(const DummyClass& temp_obj) {
      }
      DummyClass& operator=(const DummyClass& temp_obj) {
      }
};
class MyClass : public DummyClass {
   int x;
   public:
      MyClass() { }
      MyClass(int y) : x(y) {
      }
};
int main() {
   MyClass ob1(50);
   MyClass ob2(ob1); // Calls copy constructor
   ob2 = ob1; // Calls copy assignment operator
}

出力

[Error] 'DummyClass::DummyClass(const DummyClass&)' is private
[Error] within this context
In function 'int main()':
[Note] synthesized method 'MyClass::MyClass(const MyClass&)' first
required here
In member function 'MyClass& MyClass::operator=(const MyClass&)':
[Error] 'DummyClass& DummyClass::operator=(const DummyClass&)' is
private
[Error] within this context
In function 'int main()':
[Note] synthesized method 'MyClass& MyClass::operator=(const
MyClass&)' first required here

  1. 文字列をコピーするC++プログラム

    文字列は、ヌル文字で終了する1次元の文字配列です。文字列の値を別の文字列にコピーできます。これは、標準ライブラリ関数であるstrcpy()関数を使用して、またはそれなしで実行できます。 strcpy()関数を使用せずに文字列をコピーするプログラムは次のとおりです- 例 #include <iostream> using namespace std; int main() {    char str1[100] = "Magic";    char str2[100];    int i;  

  2. C ++でPythonオブジェクトを使用する方法は?

    これは、単純なPythonオブジェクトがラップされて埋め込まれている例です。これには.cを使用していますが、c++にも同様の手順があります- class PyClass(object):     def __init__(self):         self.data = []     def add(self, val):         self.data.append(val)     def __str__(self):