智能指针简单实现

今天稍微看了下boost库中的智能指针,我们知道在C/C++编程领域最臭名昭著的就是资源管理问题,而boost库能在一定程度上缓解。
当然,boost库博大精深,光智能指针就有好几种,在此我先简单示范下scoped_ptr的实现,以后如有心得再添加。

scoped_ptr用于此种情形:在函数域内,只要你用scoped_ptr申请了资源,在退出函数时,就能保证资源被销毁。下面来看下是如何实现的

template <class T>
class scoped_ptr {
    T* px;

    scoped_ptr(T* p=0):px(p) {
        printf("a scoped_ptr was created!\n");
    }

    ~scoped_ptr(void) {
        delete px;
    }

    T& operator*(void) const {
        assert(px);
        return *px;
    }

    T* operator->(void) const {
        assert(px);
        return px;
    }
};

我们来测试一下,先定义一个类
class A {
    A(void) {
        printf("an instance of A was created!\n");
    }

    ~A(void) {
        printf("the instance of A was destroyed!\n");
    }
};

int main(void)
{
    scoped_ptr<A> aptr(new A);

    return 0;
}

注意main函数中在堆中分配了一个A的实例,但是并没有调用delete,不过程序还是打印出了"the instance of A was destroyed!",说明main函数确实调用了A的析构函数。这是为什么呢?关键在于函数栈的机制,aptr在main函数退出时会被销毁,系统会调用aptr的析构函数,而aptr的析构函数正好把A delete掉了。

原文链接: https://www.cnblogs.com/john-d/archive/2010/04/18/1714648.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    智能指针简单实现

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/10114

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月6日 下午11:17
下一篇 2023年2月6日 下午11:19

相关推荐