C++에서는 클래스가 생성될 때 복사 생성자나 할당 연산자를 사용하여 클래스를 복사할 수 있습니다. 이 섹션에서는 C++에서 클래스의 개체 복사를 방지하는 방법을 볼 것입니다. 객체 복사를 방지하기 위해 몇 가지 규칙을 따를 수 있습니다. 아래와 같습니다.
1. private copy 생성자와 private 대입 연산자를 생성합니다.
예시
#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