1. 几种智能指针 1. auto_ptr: c++11中推荐不使用他(放弃) 2.shared_ptr:拥有共享对象所有权语义的智能指针 3.unique_ptr:拥有独有对象所有权语义的智能指针 4.weaked_ptr:到std::shared_ptr所管理对象的弱引用 1.1 shared_ptr 参考:https://zh.cppreference.com/w/cpp/memory/shared_ptr std::shared_...
10. 三种智能指针的实现原理和使用场景,以及线程安全? 智能指针实现原理 建立所有权的概念,对于特定的对象,只能有一个智能指针拥有它,只有拥有对象的智能指针的析构函数会删除对象。然后拥有对象的智能指针的析构函数会删除对象,然后赋值操作转让所有权。这就是unique_ptr的策略,unique_ptr能够在编译期间识别错误,跟踪...
在C++中boost库八大智能指针的掌握与理解,其核心是理解并且剖析过相应的源码, <scoped_ptr/shared_ptr/weak_ptr> 这三个是最核心的智能指针。STL 源码:对于 STL 中的容器剖析,常见容器有list、vector、stack、queue、map等,考察自动扩容的原理、map的底层实现(RBtree),源码是必须手动至少剖析一遍的,学习这些内容可...
智能指针是RAII思想的一种应用,shared_ptr是最常用的智能指针,但是,第一,效率低,可以通过在特定场合使用unique_ptr弥补这点;第二,有循环引用的问题,故引入weak_ptr;第三,不能直接封装this并返回,否则会引起引用计数错误,故引入enable_shared_from_this。 (43)四种智能指针的简单实现? 不考虑删除器的实现,unique_...
C++ 11 中的智能指针有:shared_ptr, unique_ptr 和 weak_ptr。 shared_ptr 的引用计数是存放在堆上的,多个 shared_ptr 的对象的引用计数都指向同一个堆地址。 unique_ptr 中拷贝构造函数和赋值操作符都声明为delete或private。 优先使用 make_shared 和 make_unique 的原因是为了避免内存泄露。参考C++11 中的...
4. 使用智能指针:在一些支持智能指针的编程语言中,可以使用智能指针来自动管理内存,减少野指针的产生。 总的来说,野指针是C/C++编程中的一个常见问题,它们可能导致程序不稳定、数据损坏和内存泄漏等严重问题。因此,理解野指针的危害并采取适当的预防措施是非常重要的。
std::auto_ptr是C++标准库中的一种智能指针,它可以管理通过new表达式获取的对象,并在auto_ptr本身被销毁时删除该对象。这种自动删除可以防止内存泄漏,使得内存管理更加容易。然而,std::auto_ptr有一些已知的问题,例如它不支持数组,且在复制或赋值时会改变所有权。因此,它已经在C++11中被废弃,并在C++17中被移除。
智能指针的实质是一个对象,行为却表现的像一个指针 auto_ptr:c++98版本,在c++11中已不再使用,管理权转移的思想,若通过拷贝构造和赋值操作符赋值它们,原指针会变成null ,而 复制所得的指针将取得资源的唯一控制权。 unique_ptr:c++11版本,独占对所指对象的独有权,不允许其他的智能指针共享其内部的指针,禁止进行...
避免内存泄露的几种方式 计数法:使用new或者malloc时,让该数+1,delete或free时,该数-1,程序执行完打印这个计数,如果不为0则表示存在内存泄露 (智能指针) 一定要将基类的析构函数声明为虚函数 对象数组的释放一定要用delete [] 有new就有delete,有malloc就有free,保证它们一定成对出现 ...