淺拷貝(bitwise copy)&深拷貝(memberwise copy)
沒有virtual函數(shù)
#include <iostream>
#include <string>
using namespace std;
class A {
public:
A(): n_(0) {
ptr_ = new char[5];
for (int i = 0; i < 5; ++ i) ptr_[i] = i + '0';
s_ = "12345";
}
int n_;
char* ptr_; // bitwise copy
string s_; // memberwise copy, because string has a copy construct function
};
int main() {
A a;
A b = a;
for (int i = 0; i < 5; ++ i) b.ptr_[i] = i + 'a';
b.s_ = "abcde";
cout << a.ptr_[0] << " " << b.ptr_[0] << endl;
cout << a.s_ << " " << b.s_ << endl;
return 0;
}
output:
a a
12345 abcde
類A沒有拷貝構(gòu)造函數(shù),當發(fā)生賦值時翩剪,編譯器必須為其添加一個拷貝構(gòu)造同蜻。對于常規(guī)變量,例如int,char是淺拷貝参歹;然而string是深拷貝,因為string類存在拷貝構(gòu)造函數(shù)。*
存在virtual函數(shù)
#include <iostream>
class Animal {
public:
virtual void Run() {...}
};
class Tiger: public Animal {
public:
virtual void Run() {...}
};
int main() {
Tiger tiger;
// 發(fā)生截斷
// 并且肪笋,animal的虛指針vptr指向類Animal
Animal animal = tiger; // memberwise copy
animal.Run(); // 調(diào)用的Animal的Run()
}