美文网首页程序员
【c++进阶】智能指针初体验

【c++进阶】智能指针初体验

作者: 小鱼号的代码日记 | 来源:发表于2020-11-22 16:16 被阅读0次
/*
 * c++进阶
 * 智能指针初体验
 * 小鱼号的代码日志
*/
#include <QCoreApplication>
#include<iostream>
#include<memory>
using namespace  std;
static void interfaceOfSharePrt();
class Object
{
public:
    Object(int id):m_id(id)
    {
     cout << "init obj id" << m_id << endl;
    }
    ~Object()
    {
     cout << "bye obj" << endl;
    }
    int getId() const
    {
        return m_id;
    }
private:
    int m_id;
};
typedef shared_ptr<Object> ObjectPtr;
void deleterOfObject(Object* obj)
{
   if(obj)
   {
       cout << "delete obj id " << obj->getId() << endl;
   }
   delete obj;
}
void print(ObjectPtr obj)
{
       cout << "print obj count " << obj.use_count()
            << "id "<< obj->getId() << endl;
}e
void printRef(const ObjectPtr& obj)
{
       cout << "print obj count " << obj.use_count()
            << "id "<< obj->getId() << endl;
}
void userDelete()
{
    ObjectPtr obj(new Object(2),deleterOfObject);
    ObjectPtr obj2 = obj;
}
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    interfaceOfSharePrt();
    userDelete();
    return a.exec();
}

void interfaceOfSharePrt()
{
    ObjectPtr nullObj;
    cout << "ref count is " << nullObj.use_count() << endl;
    ObjectPtr obj(new Object(1));
    cout << "ref count is " << obj.use_count() << endl;
    ObjectPtr obj2(obj);
    cout << "ref count is " << obj.use_count() << endl;
    cout << "ref count is " << obj2.use_count() << endl;
    ObjectPtr obj3 = obj;
    cout << "ref count is " << obj.use_count() << endl;
    obj2.reset();
    cout << "ref count is " << obj.use_count() << endl;
    obj2 = nullptr;
    cout << "ref count is " << obj.use_count() << endl;
    ObjectPtr obj4;
    obj3.swap(obj4);
    cout << "ref count is " << obj.use_count() << endl;
    swap(obj3,obj4);
    cout << "ref count is " << obj.use_count() << endl;

    auto p = obj.get();
    if(p)
    {
         cout << "p id is " << p->getId() << endl;
    }

    if(obj)
    {
         cout << "obj id is " << obj->getId() << endl;
    }
    obj4 = nullptr;
    cout << "only one hold ptr" << obj.unique() << endl;
    print(obj);
    printRef(obj);
}

相关文章

  • 【c++进阶】智能指针初体验

  • C++研发工程师笔试题/面试题(1-10)

    1. (1) 简述智能指针的原理;(2)c++中常用的智能指针有哪些?(3)实现一个简单的智能指针。 简述智能指针...

  • C++ 智能指针

    C++智能指针[https://zhuanlan.zhihu.com/p/54078587] C++11中智能指针...

  • c++智能指针用法

    智能指针是什么 智能指针是c++中有四个智能指针:auto_ptr、shared_ptr、weak_ptr、uni...

  • 阿里巴巴面试题基础篇 C++基础篇(二)

    ● 请你来说一下C++中的智能指针参考回答:C++里面的四个智能指针: auto_ptr, shared_ptr,...

  • Android智能指针分析

    Android智能指针分析总结 什么是智能指针 C++ 指针需要手动释放,否则会造成内存泄露,但是如果项目工程比较...

  • C++智能指针

    引用计数技术及智能指针的简单实现 基础对象类 辅助类 智能指针类 使用测试 参考: C++ 引用计数技术及智能指针...

  • 智能指针share_ptr的若干问题

    一 什么是智能指针 c++的智能指针是利用了c++的RAII机制,这样可以及时的释放资源,且即使代码中触发了异常,...

  • 智能指针学习笔记

    1. 介绍 本文介绍智能指针的使用。智能指针是c++ 中管理资源的一种方式,用智能指针管理资源,不必担心资源泄露,...

  • c++11 智能指针

    智能指针介绍 C++里面的四个智能指针: auto_ptr, unique_ptr,shared_ptr, wea...

网友评论

    本文标题:【c++进阶】智能指针初体验

    本文链接:https://www.haomeiwen.com/subject/griuiktx.html