标签:style std log private 拷贝构造函数 out sys 13.10 primer
练习13.9
析构函数执行与构造函数相反的操作,构造函数初始化对象的非static数据成员,析构函数释放对象使用的资源,并销毁对象的非static数据成员.当一个类没有定义自己的析构函数的时候,编译器会为它定义一个合成析构函数。
练习13.10
在一个构造函数中,成员的初始化是在函数体执行之前完成的,且按照他们再类中出现的顺序进行初始化。再一个析构函数中,首先执行函数体,然后销毁成员。成员按照初始化顺序的逆序销毁。
练习13.11
1 #include <iostream> 2 #include <string> 3 #include <memory> 4 5 using namespace std; 6 7 8 class HasPtr { 9 friend ostream &print(ostream &os, HasPtr &h); 10 public: 11 HasPtr(const string &s = string()) : ps(new string(s)), i(0) {} 12 HasPtr(const HasPtr &ptr); 13 HasPtr &operator=(const HasPtr &pt); 14 ~HasPtr() { delete ps; } 15 private: 16 string *ps; 17 int i; 18 }; 19 20 ostream &print(ostream &os, HasPtr &h); 21 22 int main() 23 { 24 HasPtr has("hello"); 25 HasPtr have = has; 26 print(cout, have); 27 system("pause"); 28 return 0; 29 } 30 31 HasPtr::HasPtr(const HasPtr & ptr) : ps(new string(*(ptr.ps))),i(ptr.i) {} 32 33 HasPtr & HasPtr::operator=(const HasPtr & pt) 34 { 35 ps = new string(*pt.ps); 36 i = pt.i; 37 return *this; 38 // TODO: 在此处插入 return 语句 39 } 40 41 ostream & print(ostream & os, HasPtr & h) 42 { 43 os << *h.ps << h.i << endl; 44 return os; 45 // TODO: 在此处插入 return 语句 46 }
练习13.12
函数第二个参数复制的对象,函数体中构造的两个对象。
这里要注意,当指向一个对象的引用或指针离开作用域时,析构函数不会执行。
练习13.13
1 #include <iostream> 2 #include <string> 3 #include <memory> 4 5 using namespace std; 6 7 struct X { 8 public: 9 X() { cout << "X() " << endl; } 10 X(shared_ptr<int> q, int n) : p(q), i(n) { cout << "gouzao" << endl; } 11 X(const X&) { cout << "X(const X&) " << endl; } 12 X &operator=(const X& x_1); 13 ~X() 14 { 15 cout << "delete X" << endl; 16 } 17 private: 18 shared_ptr<int> p; 19 int i; 20 }; 21 22 23 int main() 24 { 25 X x1; //默认构造函数 26 auto q = make_shared<int>(42); //新建一个智能指针 27 X x2(q, 3); //含形参的构造函数 28 x1 = x2; //拷贝赋值运算符 29 X x3(x2); //拷贝构造函数 30 system("pause"); 31 return 0; 32 } 33 34 X & X::operator=(const X & x_1) 35 { 36 p = make_shared<int> (*(x_1.p)); 37 i = x_1.i; 38 cout << "operator" << endl; 39 return *this; 40 // TODO: 在此处插入 return 语句 41 }
标签:style std log private 拷贝构造函数 out sys 13.10 primer
原文地址:http://www.cnblogs.com/wuyinfenghappy/p/7460643.html