【c++】淺拷貝與深拷貝
// 淺拷貝與深拷貝
// 像這樣的淺拷貝會導致程式崩潰,因為同一個空間被釋放了兩次
#include <iostream>
#include <string.h>
using namespace std;
class S_Copy;
ostream& operator<<(ostream& out, const S_Copy &s);
class S_Copy
{
friend ostream& operator<<(ostream& out, const S_Copy &s);
public:
S_Copy(const char *str = "")
{
p = new char[strlen(str) + 1];
strcpy(p, str);
}
~S_Copy()
{
delete[]p;
}
private:
char *p;
};
ostream& operator<<(ostream& out, const S_Copy &s)
{
out << s.p;
return out;
}
int main()
{
S_Copy s1("hello");
S_Copy s2(s1);
cout << s2 << endl;
return 0;
}
// 如圖,兩個物件裡的指標指向了同一個地址
// 深拷貝
#include <iostream>
#include <string.h>
using namespace std;
class S_Copy;
ostream& operator<<(ostream& out, const S_Copy &s);
class S_Copy
{
friend ostream& operator<<(ostream& out, const S_Copy &s);
public:
S_Copy(const char *str = "")
{
p = new char[strlen(str) + 1];
strcpy(p, str);
}
// 重寫拷貝建構函式,也開闢出一塊空間
S_Copy(const S_Copy &s)
{
p = new char[strlen(s.p) + 1];
strcpy(p, s.p);
}
~S_Copy()
{
delete[]p;
}
private:
char *p;
};
ostream& operator<<(ostream& out, const S_Copy &s)
{
out << s.p;
return out;
}
int main()
{
S_Copy s1("hello");
S_Copy s2(s1);
cout << s2 << endl;
return 0;
}
相關文章
- C++淺拷貝和深拷貝C++
- 淺談深拷貝與淺拷貝?深拷貝幾種方法。
- JS深拷貝與淺拷貝JS
- C++拷貝建構函式(深拷貝,淺拷貝)C++函式
- 深入淺出深拷貝與淺拷貝
- 深拷貝、淺拷貝與Cloneable介面
- 賦值、淺拷貝與深拷貝賦值
- Python淺拷貝與深拷貝Python
- python深拷貝與淺拷貝Python
- React之淺拷貝與深拷貝React
- 物件的深拷貝與淺拷貝物件
- vue深拷貝淺拷貝Vue
- 深入淺出的“深拷貝與淺拷貝”
- JavaScript中的淺拷貝與深拷貝JavaScript
- 淺拷貝與深拷貝的實現
- 【JavaScript】物件的淺拷貝與深拷貝JavaScript物件
- 淺拷貝與深拷貝程式碼(javascript)JavaScript
- iOS深拷貝和淺拷貝iOS
- Java深拷貝和淺拷貝Java
- 物件深拷貝和淺拷貝物件
- javascript 淺拷貝VS深拷貝JavaScript
- JavaScript深拷貝和淺拷貝JavaScript
- js 淺拷貝和深拷貝JS
- js 深拷貝和淺拷貝JS
- JavaScript淺拷貝和深拷貝JavaScript
- js深拷貝和淺拷貝JS
- js 深拷貝 vs 淺拷貝JS
- 【JS】深拷貝與淺拷貝,實現深拷貝的幾種方法JS
- 理解JS中的淺拷貝與深拷貝JS
- 圖解 Python 淺拷貝與深拷貝圖解Python
- Java 輕鬆理解深拷貝與淺拷貝Java
- 深拷貝與淺拷貝的實現(一)
- 淺探js深拷貝和淺拷貝JS
- java深克隆(深拷貝)和淺克隆(淺拷貝)Java
- python 指標拷貝,淺拷貝和深拷貝Python指標
- 實現物件淺拷貝、深拷貝物件
- go slice深拷貝和淺拷貝Go
- JavaScript之深拷貝和淺拷貝JavaScript