而 C++ 虽然从来没有公开得支持过垃圾回收机制,但 C++98/03 标准中,支持使用 auto_ptr 智能指针来实现堆内存的自动回收;C++11 新标准在废弃 auto_ptr 的同时,增添了 unique_ptr、shared_ptr 以及 weak_ptr 这 3 个智能指针来实现堆内存的自动回收。 所谓智能指针,可以从字面上理解为“智能”的指针。具体来...
智能指针是用法和行为类似于指针的类对象。 智能指针的底层对原始指针做了一定的封装。 智能指针除了像指针一样可以存储变量的地址,还提供了其他功能,比如可以管理动态内存分配,对引用进行计数等。 当智能指针所指向的变量离开了作用域或被重置时,智能指针会自动释放该变量所占用的堆内存资源。 至于为什么要引入智能指...
27、四种智能指针及底层实现:auto_ptr、unique_ptr、shared_ptr、weak_ptr 28、shared_ptr中的循环引用...
auto_ptr是一个智能指针,用于管理通过新表达式获得的对象,并在销毁auto_ptr本身时删除该对象。 当使用auto_ptr类描述对象时,它存储指向单个已分配对象的指针,以确保当其超出范围时,它指向的对象必须自动销毁。它基于专有所有权模型,即相同类型的两个指针不能同时指向同一资源。如以下程序所示,指针的复制或分配会更改...
智能指针 左值、右值引用和move语义 类型转换方式 常用的设计模式 线程安全的单例模式 内存溢出和内存泄漏 C++11新特性 静态链接库和动态链接库 4 STL标准模板库 (务必能进行源码剖析) 迭代器、空间配置器理解 常用容器特点、用法以及底层实现vector、list、deque、set、map、unorderedmap 5 推荐书籍 《C++Primer》可...
实现:均为平衡二叉树,具体是红黑树。 map和hashmap区别 map:红黑树。key有序。 hashmap:哈希表(vector保存桶,list处理溢出【有序】)。存取操作复杂度为1。 补充:哈希表(hash函数直接定址,解决冲突):通过初始容量和加载因子(0.75) 智能指针auto_ptr
了解std::vector的方方面面和底层实现 vector是动态扩容的,2的次方往上翻,为了确保数据保存在连续空间,每次扩充,会将原member悉数拷贝到新的内存块; 不要保存vector内对象的指针,扩容会导致其失效 ;可以通过保存其下标index替代。 运行过程中需要动态增删的vector,不宜存放大的对象本身 ,因为扩容会导致所有成员拷贝构...
[9]这9个用户自行分配的m_cBuffer对应内存空间将不能释放 从而造成内存泄漏 delete[] a; //调用使用类对象的析构函数释放用户自己分配内存空间并且 释放了a指针指向的全部内存空间所以总结下就是,如果 ptr 代表一个用new申请的内存返回的内存空间地址,即所谓的指针,那么:delete ptr 代表用来释放内存,且只用来...
智能指针使用:shared_ptr、weak_ptr、unique_ptr等 一些关键字的作用:static、const、volatile、extern 四种类型转换:static_cast, dynamic_cast, const_cast, reinterpret_cast STL部分容器的实现原理,如 vector、deque、map、hashmap 模板特化、偏特化,萃取 traits 技巧 ...
此外,C++在发展过程中也进行了一系列的修订和演变。这些修订和演变使得C++在保持兼容性的同时,不断引入新的特性和优化。例如,C++11标准引入了自动类型推导、智能指针、lambda表达式等新特性,使得C++的编程更加简洁、高效。C++与C语言的应用场景 由于C语言和C++在特性上的差异,它们在应用场景上也有所不同。C语言...