13.9 類里前面帶~的函數,析構函數用來銷毀對象釋放資源,當沒有定義自己的析構函數的時候編譯器會自己定義合成析構函數。
13.10 智能指針的計時器會變為0,然后會釋放智能指針指向的內存,然后銷毀對象。 銷毀對象,但是指針指向的內存不會被釋放,因為是weak_ptr
13.11
#include <string>class Hasptr {public: HasPtr(const std::string &s = std::string()) : ps(new std::string(s)), i(0) { } HasPtr(const HasPtr& hp) : ps(new std::string(*hp.ps)), i(hp.i) { } HasPtr& Operator=(const HasPtr& rhs){ if(this=&rhs) return this; delete ps; ps=new string (*rhs.ps); i=rhs.i; return *this; } ~HasPtr(){ delete ps; }PRivate: std::string *ps; int i;};13.12 3次,離開函數的時候,accum,item1,item2會被析構。
13.13 @pezy
#include <iostream>#include <vector>#include <initializer_list>struct X { X() { std::cout << "X()" << std::endl; } X(const X&) { std::cout << "X(const X&)" << std::endl; } X& operator=(const X&) { std::cout << "X& operator=(const X&)" << std::endl; return *this; } ~X() { std::cout << "~X()" << std::endl; }};void f(const X &rx, X x){ std::vector<X> vec; vec.reserve(2); vec.push_back(rx); vec.push_back(x);}int main(){ X *px = new X; f(*px, *px); delete px; return 0;}
|
新聞熱點
疑難解答