C++ 智能指針

之前一直知道本身C++弱,可是何曾想.....居然弱到讓人心碎....  就是當是補當時莉莉的做業吧!html

參考博客:JustDoITios

C++的智能指針有四種,auto_ptr, shared_ptr, weak_ptr, unique_ptr,第一個已經被C++11廢掉了函數

使用智能指針,是爲了C++的內存泄漏問題。通常new一個對象,通常不能避免代碼未執行到delete時,程序就跳轉出去了,揮着函數沒有執行到delete就返回了,若是不在每個可能跳轉的地方或者返回的語句前釋放內存,就會形成內存泄漏。使用智能指針,是由於智能指針就是一個類,當超出類的做用域時,類就會自動調用析構函數,析構函數會自動釋放內存資源。spa

auto_ptr:主要是爲了解決「有異常拋出時發生內存泄漏」的問題。以下的簡單代碼是這類問題的一個簡單示例。指針

#include <iostream>
#include <string.h>
#include <memory>
using namespace std;

class Test
{
public:
    Test(string s)
    {
       str = s;
       std::cout<<"creat test\n";
    }
    ~Test()
    {
            std::cout<<"delete test: "<<str<<std::endl;
    }
    string& getStr()
    {
        return str;
    }
    void setStr(string s)
    {
        str = s;
    }
    void print()
    {
            std::cout<<str<<std::endl;
    }
private:
    string str;
};
 
 
int main()
{
    std::auto_ptr<Test> ptest(new Test("123"));
    ptest->setStr("hello ");
    ptest->print();
    ptest.get()->print();
    ptest->getStr() += "world !";
    (*ptest).print();
    ptest.reset(new Test("123"));
    ptest->print();
    return 0;
}

  運行結果:htm

相關文章
相關標籤/搜索