首页 > 其他分享 >boost库之智能指针

boost库之智能指针

时间:2023-06-09 16:02:00浏览次数:44  
标签:const smartPointer 智能 scoped boost ptr 指针

一、boost::scoped_ptr

boost::scoped_ptr是Boost库中的一个智能指针类,用于管理动态分配的对象,并确保在超出作用域时自动释放资源。boost::scoped_ptr提供了一种简单而安全的方式来管理对象的生命周期。它的行为类似于C++原始指针,但它负责在其生命周期结束时自动调用delete来释放所管理的对象。它是一个非共享指针,即不能进行拷贝构造或赋值操作,这样可以避免多个指针同时删除同一个对象的问题。

示例演示:

#include <iostream>
#include <boost/scoped_ptr.hpp>

class SmartPointers
{
public:
    SmartPointers():m_value(0) { std::cout << "智能指针构造函数" << std::endl; }
    ~SmartPointers() { std::cout <<  "智能指针析构函数" << std::endl; }

public:
    void setValue(int value) { m_value = value; }
    int getValue() { return m_value; }

private:
    int m_value;
};

void test() {
    boost::scoped_ptr<SmartPointers> smartPointer(new SmartPointers);
    smartPointer->setValue(10);
    std::cout << smartPointer->getValue() << std::endl;
}

int main() {
    test();
    return 0;
}

打印结果:

 可以看出当离开test()作用域后,调用了SmartPointers的析构函数,说明boost::scoped_ptr调用了delete释放了内存

boost::scoped_ptr部分源码:

private:
    scoped_ptr(scoped_ptr const &);
    scoped_ptr & operator=(scoped_ptr const &);
    void operator==( scoped_ptr const& ) const;
    void operator!=( scoped_ptr const& ) const;

从上述源码中可以看出boost::scoped_ptr 是一个非共享指针,即不能进行拷贝构造或赋值操作。这意味着每个 boost::scoped_ptr 对象拥有独立的所有权,避免了资源释放的重复和悬挂指针的问题。

boost::scoped_ptr常用操作:

/* 用一个新的对象来重新初始化智能指针 */
void reset(T * p = 0)

/* 以引用的形式访问所管理的对象的成员 */
T & operator*()

/* 以指针的形式访问所管理的对象的成员 */
T * operator->() 

/* 获取所含对象的指针 */
T * get()

/* 交换两个boost::scoped_ptr管理的对象 */
void swap(scoped_ptr & b)

示例演示:

void test() {
    boost::scoped_ptr<SmartPointers> smartPointer(new SmartPointers);
    smartPointer->setValue(10);
    std::cout << "----------交换前----------" << std::endl;
    std::cout << smartPointer->getValue() << std::endl;
    std::cout << smartPointer.get()->getValue() << std::endl;
    std::cout << (*smartPointer).getValue() << std::endl;
    
    boost::scoped_ptr<SmartPointers> smartPointer_1(new SmartPointers);
    smartPointer_1->setValue(20);
    smartPointer.swap(smartPointer_1);
    std::cout << "----------交换后----------" << std::endl;
    std::cout << smartPointer->getValue() << std::endl;
    std::cout << smartPointer_1->getValue() << std::endl;
}

打印结果:

 

标签:const,smartPointer,智能,scoped,boost,ptr,指针
From: https://www.cnblogs.com/QingYiShouJiuRen/p/17469434.html

相关文章

  • 西门子PLC智能网关有什么功能?能采集哪些PLC?
    智能制造与自动化技术的发展带来了更高的生产效率、更低的生产成本和更智能的管理模式,为各行各业提供了科学实用的工业物联网方案。西门子PLC是一种应用广泛的可编程逻辑控制器,具有S7-200SMART、S7-300、S7-400、S7-1200、S7-150型号,适用于各种设备的自动化控制,如智能工厂、污水处......
  • 未来制鞋厂的智能化改造: RFID技术的应用
    未来制鞋厂的智能化改造:RFID技术的应用近年来,RFID(射频识别)的应用在生产、物流、零售等方面得到了广泛的应用。在制鞋厂中,RFID的应用也越来越受到关注。RFID技术可以让制鞋厂实现对鞋子的全程跟踪,从原材料的采购到鞋子的成品出货,都可以实时监控。这不仅可以提高生产效率,减少生产成......
  • 智能生产、追溯精准——晨控RFID技术在锂电行业中的显著应用
    智能生产、追溯精准——晨控RFID技术在锂电行业中的显著应用随着电动汽车和能源储存系统市场的不断扩大,锂离子电池作为其核心部件,以其高能量密度、长寿命等优点成为了主流选择。而在锂电池的制造过程中,RFID技术(RadioFrequencyIdentification)被广泛应用于电池的生产、管理和追溯过......
  • 下标,指针,迭代器
    1//使用下标遍历数组中的元素2inta[4]={1,2,3,4};3for(size_ti=0;i<4;++i)4{5cout<<a[i]<<endl;6}1//使用下标任意访问数组中某个元素2inta[4]={1,2,3,4};3cout<<a[1]<<endl;1//使用指针访问遍历数组中......
  • 高级别智能驾驶业务系列:自动驾驶系统
        近年来,伴随着智慧化港口的大潮流,经纬恒润L4高级别智能驾驶业务产品也陆续扎根港口自动驾驶多个项目中,帮助港口实现无人水平运输自动化,达到降本增效的效果,助力客户实现智慧化绿色港口。      在整个港口水平运输场景中,经纬恒润提供了端到端的车、路、网、......
  • 智能电动家居桌行业市场现状调研及未来趋势报告2023-2029
    2023-2029全球智能电动家居桌行业调研及趋势分析报告2022年全球智能电动家居桌市场规模约亿元,2018-2022年年复合增长率CAGR约为%,预计未来将持续保持平稳增长的态势,到2029年市场规模将接近亿元,未来六年CAGR为%。随着人们对舒适、健康和个性化工作环境的需求增加,智能电动家居桌......
  • [人工智能-NLP]使用GPT-2预训练模型进行微调
    下面是一个使用GPT-2进行微调的示例。以文本生成为例,我们将微调GPT-2来生成新闻标题。此外,我们将使用PyTorch作为深度学习框架,以便于构建和训练模型。安装PyTorch和Transformers首先需要安装PyTorch和Transformers库。在终端中输入以下命令:pipinstalltorchtransformers......
  • C++ 指针
    一、什么是指针?1、指针是一个变量,其值为另一个变量的地址2、double*类型是一种指针类型,用于指向double类型的内存地址3、指针的值都是代表内存地址的十六进制数二、C++中使用指针实例#include<iostream>usingnamespacestd;intmain(){intvar=20;/......
  • C++面试八股文:C++中指针、引用、解引用和取地址有什么不同?
    C++面试八股文:C++中指针、引用、解引用和取地址有什么不同?某日小二参加XXX科技公司的C++工程师开发岗位2面:面试官:指针、引用、解引用和取地址是C++中的重要概念,请问它们在语法和语义上有所不同?小二:指针是一个变量,它存储了一个内存地址。小二:引用是一个别名,它允许使用一个......
  • 指针
    指针类型决定了指针进行解引用操作的时候,能够访问空间的大小。指针的类型决定了指针向前或向后走一步有多大(距离)野指针:野指针就是指针指向的位置是不可知的(随机的不正确的没有明确限制的)1.指针未初始化int*p;//局部变量指针未初始化,默认随机值*p=20;2.指针越界访问intarr[10]={0}......