首页
Python
Java
前端
数据库
Linux
Chatgpt专题
开发者工具箱
ptr专题
关于std::shared_ptr和enable_share_from_this的一个隐蔽的问题
在使用共享指针时,遇到了一个如下问题: #include <iostream>class traversal;class observer {std::shared_ptr<traversal> m_tra;public:observer(std::shared_ptr<traversal> t):m_tra(t) {};~observer() { std::cout << "releas
阅读更多...
C++-标准库 weak_ptr
文章目录 概述构建cyclic reference例子 概述 shared_ptr的作用主要是在最后一个指向资源的shared_ptr销毁时自动释放资源,然而在某些场景下这种行为可能不被期望。例如: 两个或者多个对象都使用shared_ptr,并且相互通过shared_ptr指向对方,如果存在一个环路(cyclic reference),那么由于环路上的shared_ptr的u
阅读更多...
【软件技巧】第35课,软件逆向安全工程师之汇编指令mov、ptr、xchg交换指令,每天5分钟学习逆向吧!
在x86汇编语言中,mov 指令用于将一个值从一个位置移动到另一个位置。这个值可以是立即数、寄存器中的值、内存中的值或者是一个指针。mov 指令是汇编语言中最常用的指令之一,因为它在数据传输和初始化操作中起着核心作用。 mov 指令的基本格式: mov 目标操作数, 源操作数 目标操作数:接收数据的操作数,通常是寄存器、内存地址或者是一个指针。源操作数:提供数据的操作数,可以是立即数、寄存器
阅读更多...
【C++11及其特性】智能指针——unique_ptr
unique_ptr目录 一.排他所有权模式二.auto_ptr的缺点1.可以直接复制和拷贝构造2.STL可以直接赋值3.不支持动态内存分配数组 三.unique_ptr(C++11)1.不支持直接赋值和构造2.STL可以不可以直接赋值3.支持动态内存分配数组 四.unique_ptr的用法1.构造函数2.赋值操作3.主动释放对象4.放弃对象控制权5.重置6.交换 五.排他性智能指针的陷阱六
阅读更多...
【C++11及其特性】智能指针——auto_ptr
auto_ptr目录 一.为什么要使用智能指针1.内存泄漏2.解决方法 二.auto_ptr(C++98)1.用法2.get()3.release()4.reset() 三.注意事项1.全局定义2.auto_ptr动态内存分配3.auto_ptr变量赋值 四.完整代码 一.为什么要使用智能指针 1.内存泄漏 定义了一个测试类: #include <iostream>#inc
阅读更多...
智能指针std::auto_ptr和tr1:shared_ptr用法(总结的最好的一篇)
下面通过一个工厂函数(createInvestment())返回一个特定的investment对象: Investment* createInvestment(); 见如下函数: void f() { Investment* pInv = createInvestment(); .... delete pInv; } 上面的程序
阅读更多...
ptr.inl.hpp:121:13: error: cannot convert ‘const char*’ to ‘cv::Formatted*’ in initialization
opencv 里面定义了 print()函数 。如果在写C++时候,将printf 写成了print就会报这个错误。
阅读更多...
【C++】智能指针——auto_ptr,unique_ptr,shared_ptr
目录 auto_ptr unique_ptr shared_ptr 并发问题 循环引用问题 个人主页:传送门——>东洛的克莱斯韦克 智能指针的原理:传送门——>智能指针的原理 auto_ptr 使用方法参考官方文档 传送门——>auto_ptr文档 auto_ptr并不是一个优秀的智能指针,它的设计理念是——管理权转移。如下代码示意 auto_ptr(aut
阅读更多...
shared_ptr使用
为了解决C++内存泄漏的问题,C++11引入了智能指针(Smart Pointer)。原理:接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈上的变量自动被销毁,智能指针内部保存的内存也就被释放掉了(除非将智能指针保存起来)。C++11提供了三种智能指针:std::shared_ptr, std::unique_ptr, std::weak_ptr,使用
阅读更多...
C++:共享指针(shared_ptr)详解
shared_ptr是C++11提供的另外一种常见的智能指针,与unique_ptr独占对象所有权不同,shared_ptr允许多个指针指向同一个对象。 每个shared_ptr对象都有一个关联的计数器,被称为引用计数,用来记录有多少个shared_ptr指向所管理的内存对象。这个计数器是线程安全的。每当多一个智能指针一个对象时,指向该对象的所有智能指针内部的引用计数加1,每当减少一个智能指针指
阅读更多...
C++:独占指针(unique_ptr)的理解
引入 在C++中,动态内存的管理是通过运算符new/delete来完成的: new:在动态内存中为对象分配空间,并且返回一个指向该对象的指针,我们可以选择返回对象对其进行初始化;delete:接受一个动态对象的指针,销毁该对象,并且释放与之关联的内存。 动态分配的对象的生命周期与它们在哪里创建是无关的,只有当显式地被释放时,这些对象才会销毁。 当我们对动态内存的使用不当时,会出现很多麻烦:
阅读更多...
DECLARE_GLOBAL_DATA_PTR、gd_t、bd_t及uboot中 start_armboot 代码分析
一、Uboot中DECLARE_GLOBAL_DATA_PTR 只是一个定义的宏,这个宏定义了一个gd_t全局数据结构的指针,这个指针存放在指定的寄存器中(386体系结构没有放到指定寄存器中)。这个宏定义在\include\asm-arm\globe_data.h文件中 #define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *g
阅读更多...
C++ 中的智能指针 unique_ptr 和 shared_ptr
C++ 中的智能指针是用于自动管理动态内存资源的工具,它们通过 RAII(资源获取即初始化)机制来确保对象在适当的时候被释放,从而避免内存泄漏和其他与内存管理相关的问题。C++ 标准库中提供了三种主要的智能指针类型:std::unique_ptr、std::shared_ptr 和 std::weak_ptr。以下是它们的详细总结: 1. std::unique_ptr 独占所有权:std::
阅读更多...
【Opencv】一文向您详细介绍 `Mat::ptr()` 函数
【Opencv】一文向您详细介绍 Mat::ptr() 函数 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的普通本硕,曾有幸发表过人工智能领域的 中科院顶刊一作论文,熟练掌握PyTorch框架。 🔧 技术专长: 在CV、NLP及多模态等领域有丰富的项目实战经验。已累计提供近千次定
阅读更多...
用 __android_log_print(ANDROID_LOG_DEBUG, 打印出data_ptr[i]的值
在Android NDK开发中,`__android_log_print` 函数用于将日志信息输出到Logcat。如果你想打印出指针 `data_ptr` 指向的数组中第 `i` 个元素的值,你可以使用以下代码: ```cpp #include <android/log.h> // 假设 data_ptr 是一个指向 unsigned char 类型数据的指针 unsigned char* d
阅读更多...
[4 使用C++11解决内存泄漏问题] 4.1 shared_ptr / 4.2 unique_ptr / 4.3 weak_ptr
智能指针是存储指向动态分配(堆内存)对象指针的类。 通用实现技术是使用引用计数。每使用它一次,引用计数加1,每析构一次,引用计数减1,减为0时,删除所指向的堆内存。 C++11提供三种智能指针,std::shared_ptr,std::unique_prt和std::weak_ptr。需引用头文件。 4.1 shared_ptr共享的智能指针 shared_ptr使用引用计数,每一个s
阅读更多...
C++ unique_ptr
深刻理解一个原理的方法之一就是去自我实现一个,上代码: 1 自定义unique_ptr #include <iostream>#include <utility>template<typename T>class unique_ptr {private:T * ptr_resource = nullptr;public:explicit unique_ptr(T* raw_resourc
阅读更多...
【C++98 智能指针1 auto_ptr的原理及代码案例】已弃用!!
std::auto_ptr 是 C++98 引入的一个简单的独占所有权智能指针,但在 C++11 中已经被弃用(deprecated),并在 C++17 中被移除。这是因为 std::auto_ptr 在所有权转移时的行为(特别是通过赋值和复制操作)可能导致意外的结果和难以调试的问题。 原理 std::auto_ptr 的原理是基于独占所有权的模型。它管理一个指向动态分配对象的指针,并在 au
阅读更多...
shared_ptr 智能指针 极简火速入门
综述: new的方式,众所皆知,申请的空间在堆区,需要自己释放,而智能指针,通过系统维护,虽然也在堆区申请可空间,但是无需自己释放,从而完全避免了因忘记释放而造成的内存泄露,故墙裂建议用new的地方全部换成shared_ptr。 注:shared_ptr主要用于对象,以下示例代码用int和string是为了方便。 #include <tr1/memory>
阅读更多...
编写auto_ptr感
首先,上自己编写的auto_ptr #include<iostream>using namespace std;template<typename T>class my_auto_ptr{public://构造函数my_auto_ptr() :ptr(NULL){}my_auto_ptr(const T *x) :ptr((T *)x){}//拷贝构造函数my_auto_ptr(my
阅读更多...
memory动态内存管理学习之shared_ptr
此头文件是动态内存管理库的一部分。std::shared_ptr 是一种通过指针保持对象共享所有权的智能指针。多个 shared_ptr 对象可持有同一对象。下列情况之一出现时销毁对象并解分配其内存: 最后剩下的持有对象的 shared_ptr 被销毁;最后剩下的持有对象的 shared_ptr 被通过 operator= 或 reset() 赋值为另一指针。 成员函数 (构造函数) 构造
阅读更多...
智能指针-share_ptr循环引用导致内存泄漏
有两个栈内share_ptr对象aptr/bptr分别指向两个对象A/B,A/B两个对象互相使用一个shared_ptr成员变量指向对方A/B,会造成循环引用。 当两个栈内存离开main函数作用域后只是对象对象A/B引用计数减少1,但A/B对象的引用计数并没有减少到0,因此内存不会被share_ptr的析构函数给释放,造成内存泄漏 #include<iostream>#include<m
阅读更多...
boost 智能指针auto_ptr scoped_ptr shared_ptr scoped_array shared_array 总结
shared_ptr<T> 内部维护一个引用计数器来判断此指针是不是需要被释放。是boost中最常用的智能指针了。 scoped_ptr<t> 当这个指针的作用域消失之后自动释放 intrusive_ptr<T> 也维护一个引用计数器,比shared_ptr有更好的性能。但是要求T自己提供这个计数器。 weak_ptr<T> 弱指针,要和share
阅读更多...
C++唯一智能指针(make_unique/unique_ptr/reset/release/get/13.1)
使用make_unique获取一个智能指针,智能指针的类型是unique_ptr // a不是数组,小括号里的就是值std::unique_ptr<int> a = std::make_unique<int>(666);std::cout << *a << std::endl;std::cout << a << std::endl;std::cout << "--------------
阅读更多...
C++共享指针shared_ptr的理解分享
share_ptr是线程安全的吗 回答: 如果多个线程同时拷贝同一个shared_ptr对象,不会有问题,因为shared_ptr的引用技术是线程安全的。如果多个线程同时修改同一个shared_ptr对象,不是线程安全的。如果多个线程同时读写shared_ptr指向的内存对象,不是线程安全的。 关键点 引用计数的安全性:std::shared_ptr的引用计数是原子的,这意味着增加或减少引
阅读更多...
shared_ptr和动态数组
shared_ptr和动态数组 转载自 shared_ptr和动态数组 std::shared_ptr智能指针是c++11一个相当重要的特性,可以极大地将开发者从资源申请/释放的繁重劳动中解放出来。 然而直到c++17前std::shared_ptr都有一个严重的限制,那就是它并不支持动态数组: #include <memory>std::shared_ptr<int[]> sp1(n
阅读更多...