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
-
文字列をコピーするC++プログラム
文字列は、ヌル文字で終了する1次元の文字配列です。文字列の値を別の文字列にコピーできます。これは、標準ライブラリ関数であるstrcpy()関数を使用して、またはそれなしで実行できます。 strcpy()関数を使用せずに文字列をコピーするプログラムは次のとおりです- 例 #include <iostream> using namespace std; int main() { char str1[100] = "Magic"; char str2[100]; int i;
-
C ++でPythonオブジェクトを使用する方法は?
これは、単純なPythonオブジェクトがラップされて埋め込まれている例です。これには.cを使用していますが、c++にも同様の手順があります- class PyClass(object): def __init__(self): self.data = [] def add(self, val): self.data.append(val) def __str__(self):