13.9 類里前面帶~的函數(shù),析構(gòu)函數(shù)用來(lái)銷毀對(duì)象釋放資源,當(dāng)沒(méi)有定義自己的析構(gòu)函數(shù)的時(shí)候編譯器會(huì)自己定義合成析構(gòu)函數(shù)。
13.10 智能指針的計(jì)時(shí)器會(huì)變?yōu)?,然后會(huì)釋放智能指針指向的內(nèi)存,然后銷毀對(duì)象。 銷毀對(duì)象,但是指針指向的內(nèi)存不會(huì)被釋放,因?yàn)槭莣eak_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次,離開(kāi)函數(shù)的時(shí)候,accum,item1,item2會(huì)被析構(gòu)。
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;}新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注