防止 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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP