std::cout << secondPoiner.getCount() << '\n'; // 此时三个指针都指向同一对象 SmartPointer<int> thiredPointer; secondPoiner = thiredPointer; // 把一个指针指向其他内容, 减少计数 std::cout << pointer.getPointer() << '\n'; std::cout << pointer.getCount() << '\n'; // 空指针调...
std::unique_ptr<int> p3 = std::move(p1); // 转移所有权, 现在那块内存归p3所有, p1成为无效的指针. 3) C++11或boost的shared_ptr,基于引用计数的智能指针。可随意赋值,直到内存的引用计数为0的时候这个内存会被释放。 4)C++11或boost的weak_ptr,弱引用。 引用计数有一个问题就是互相引用形成环,这样...
std::unique_ptr<int> p3 = std::move(p1); // 转移所有权, 现在那块内存归p3所有, p1成为无效的指针. 3) C++11或boost的shared_ptr,基于引用计数的智能指针。可随意赋值,直到内存的引用计数为0的时候这个内存会被释放。 4)C++11或boost的weak_ptr,弱引用。 引用计数有一个问题就是互相引用形成环,这样...
shared_ptr则允许多个指针指向同一个对象,实现基于引用计数技术。 智能指针管理的着一个对象,并记录着所有管理同个对象的指针个数,这个个数称为计数。藉由智能指针去初始化或赋值其他智能指针时,计数的值增加1,表示资源对象多了一个引用;当智能指针的生命周期结束或者指向别的对象时,计数的值减去1,表示资源对象减少...
快手一面面试题:请介绍C++中unique_ptr的原理?(c++新特性:智能指针面试题) 01:07 米哈游后端开发一面:C++的条件变量为什么要配合锁使用? 02:06 小红书一面:MySQL中如果发生死锁应该如何解决? 01:38 小红书一面:MySQL中的事务隔离级别有哪些? 01:44 米哈游面试题: MySQL 的覆盖索引是什么? 00:55 ...
一、智能指针实现原理 在C98里标准库提供一个std::auto_ptr的实现,以应对C++需要程序员自己管理内存资源广泛存在的问题,诸如野指针,内存泄漏,内存重复释放等令人困扰的问题。 对于智能指针基本的几个需求: 自动析构。 这是最核心的特征,紧随其后的unique_ptr, share_ptr 这些进阶版的指针封装类型无不立足于此 ...
答案链接:C++高频面试题:智能指针、多态、虚函数、stl原理 智能指针实现原理 智能指针,里面的计数器何时会改变 智能指针和管理的对象分别在哪个区(智能指针本身在栈区,托管的资源在堆区,利用了栈对象超出生命周期后自动析构的特征,所以无需手动delete释放资源。 面向对象的特性:多态原理 介绍一下虚函数,虚函数怎么实...
简介: 【C/C++ 泡沫精选面试题03】谈谈C/C++ 智能指针?面试官考察意图 面试官在提出这个问题时,可能想要考察应聘者的以下几个方面: C++基础知识:应聘者是否理解智能指针的概念和用法,这是最基本的要求。 C++内存管理能力:智能指针是处理内存管理的重要工具,对其的理解程度反映了应聘者处理内存管理问题的能力。 了解...
我们先来看看强智能指针shared_ptr循环引用所带来的问题: 显而易见,类A中有一个指向类B的shared_ ptr强类型智能指针,类B中有一个指向类A的shared_ ptr强类型智能指针 此时,有两个强智能指针指向了对象A,对象A的引用计数为2。也有两个强智能指针指向了对象B,对象B的引用计数为2。 当主函数return返回后,对象...
智能指针对象中引用计数是多个智能指针对象共享的,两个线程中智能指针的引用计数同时++或–,这个操作不是原子的,引用计数原来是1,++了两次,可能还是2.这样引用计数就错乱了。会导致资源未释放或者程序崩溃的问题。所以只能指针中引用计数++、–是需要加锁的,也就是说引用计数的操作是线程安全的。