真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Boost庫(kù)中shared_ptr(上)

1、共享性智能指針(shared_ptr)

成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站制作、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)新民,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):13518219792

  引用計(jì)數(shù)型指針

  shared_ptr是一個(gè)最像指針的“智能指針”,是boost.smart_ptr庫(kù)中最有價(jià)值,最重要,也是最有用的。

  shared_ptr實(shí)現(xiàn)的是引用技術(shù)型的智能指針,可以被拷貝和賦值,在任意地方共享它,當(dāng)沒(méi)有代碼使用(此時(shí)引用計(jì)數(shù)為0)它才刪除被動(dòng)態(tài)分配的對(duì)象。shared_ptr也可以被安全的放到標(biāo)準(zhǔn)容器中;

2、怎么使用shared_ptr

舉一個(gè)操作的例子:

#include
#include
using namespace std;
using namespace boost;

int main(void){
    int *p = new int(10);
    shared_ptr ps(p);
//    cout<<*ps< ps1 = ps;
    cout< ps2;
    ps2 = ps1;
    cout<

關(guān)鍵在shared_ptr中存在共享引用計(jì)數(shù)。

Boost庫(kù)中shared_ptr(上)

3、框架的搭建

閱讀源代碼:

shared_ptr 中的私有數(shù)據(jù)成員:

private:
    T *px;
    shared_count pn; //對(duì)象成員,肯定先調(diào)這個(gè)對(duì)象的構(gòu)造函數(shù);

之前的引用計(jì)數(shù)通過(guò)一個(gè)指針,現(xiàn)在的引用計(jì)數(shù)通過(guò)一個(gè)對(duì)象,pn

構(gòu)造函數(shù)的調(diào)用順序:先虛基類(lèi),父類(lèi),對(duì)象成員,最后構(gòu)造自己;

此時(shí)的模型如下:

Boost庫(kù)中shared_ptr(上)

其后調(diào)用對(duì)象成員的構(gòu)造函數(shù)

shared_counted中的私有數(shù)據(jù)成員:

private:
    sp_counted_base *pi; //有一個(gè)指向引用計(jì)數(shù)器父類(lèi)的指針;

此時(shí)就得先寫(xiě):sp_counted_base類(lèi)了;

sp_counted_base類(lèi)中的私有數(shù)據(jù)成員:

private:
    long use_count_;

然后看到在shared_counted的構(gòu)造函數(shù):

public:
    template  //此時(shí)類(lèi)型不定,寫(xiě)模板函數(shù)
        shared_count(T *p) : pi(new sp_counted_impl_xx(p)){ //特別重要,這個(gè)構(gòu)造函數(shù)

此時(shí)就得寫(xiě)sp_counted_impl_xx類(lèi)了:這是繼承sp_counted_base類(lèi)

其內(nèi)部數(shù)據(jù)時(shí)成員:

private:
    T *px_;

此時(shí)整體的建構(gòu)體系就已經(jīng)形成:

我認(rèn)為是這樣的:

  (1)、先實(shí)現(xiàn)了shared_ptr類(lèi),因?yàn)橛袑?duì)象成員,其后調(diào)用構(gòu)造函數(shù),

  (2)、實(shí)現(xiàn)了shared_count; 其數(shù)據(jù)成員有sp_counted_base,

  (3)、因?yàn)榫幾g器的順序,先類(lèi)名,在數(shù)據(jù)成員,最后函數(shù),所以此時(shí)先實(shí)現(xiàn)sp_counted_base;

  (4)、因?yàn)閟hared_counted中的構(gòu)造函數(shù)要在堆上開(kāi)辟sp_counted_impl_xx空間,最后實(shí)現(xiàn)是sp_counted_impl_xx,它有繼承sp_counted_base,所以構(gòu)造函數(shù)的調(diào)用順序就很清楚了。

  構(gòu)造函數(shù)的調(diào)用順序:sp_counted_base、sp_counted_impl_xx、shared_count、shared_ptr

此時(shí)的具體實(shí)現(xiàn)代碼如下:

#ifndef _CONFIG_H_
#define _CONFIG_H_

#include
using namespace std;

#endif
////////////////////////////////////////////////////////////////////////////
#ifndef _SHARED_PTR_H_
#define _SHARED_PTR_H_

#include"shared_count.h"

template
class shared_ptr{
public:
    shared_ptr(T *p = 0) : px(p), pn(p){
        cout<<"Create shared_ptr object!"<  //此時(shí)類(lèi)型不定,寫(xiě)模板函數(shù)
        shared_count(T *p) : pi(new sp_counted_impl_xx(p)){
        cout<<"Create shared_cout object!"<
class sp_counted_impl_xx : public sp_counted_base{
public:
    sp_counted_impl_xx(T *p) : px_(p){
        cout<<"Create sp_counted_impl_xx object"<
#include"shared_ptr.h"
using namespace std;

int main(void){
    int *p = new int(10);
    shared_ptr ps(p);   
}

以下是運(yùn)行結(jié)果:

Boost庫(kù)中shared_ptr(上)

以上就是只搭好了大致的框架,并沒(méi)有考慮內(nèi)存泄漏,析構(gòu)的具體寫(xiě)法和其它函數(shù)的實(shí)現(xiàn);

那么整個(gè)模型如下:

Boost庫(kù)中shared_ptr(上)


當(dāng)前標(biāo)題:Boost庫(kù)中shared_ptr(上)
網(wǎng)站URL:http://weahome.cn/article/jsjjej.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部