标签:style class blog c code ext
和默认构造函数一样,当用户未显式定义复制构造函数时,编译器只有在某些条件下才会合成一个nontrivial的复制构造函数。所以,如果一个类未定义复制构造函数,编译器就自动为它产生出一个,这句话是错误的。下面主要讨论在哪些情况下,编译器才会自动合成一个复制构造函数。class Foo { public: int x, y; };
class Foo { public: int x, y; string str; };
#include <iostream> using namespace std; class Foo { public: Foo() {} // 此构造函数必须定义 Foo(const Foo &f) { cout << "Foo‘s copy construct!" << endl; } }; class Bar: public Foo { public: // 未定义复制构造函数 int x, y; Foo foo; }; int main() { Bar ba; Bar bb = ba; return 0; }
#include <iostream> using namespace std; class Foo { public: virtual void func() { cout << "virtual function in Foo!" << endl; } }; class Bar: public Foo { public: void func() { cout << "virtual function in Bar!" << endl; } }; int main() { Bar b1; Bar b2 = b1; // vptr直接复制,指向相同的virtual function table b2.func(); Foo foo = b1; // 发生切割,vptr不直接复制,指向不同的virtual function table foo.func(); return 0; }
模式识别 - 处理特征数据 及 代码,布布扣,bubuko.com
标签:style class blog c code ext
原文地址:http://blog.csdn.net/caroline_wendy/article/details/26240241