操作内存 创建内存:new 过程:用new创建内存,如果成功的话那么直接分配,然后调用对象的构造函数,如果分配不够,那么先去调用用户自己写的set_new_handler函数,一般这个函数是用来释放些内存,然后使多点内存,然后再去申请,如果还是不行,再调用该函数,但是一般就是用个标记变量释放第一次, ...
分类:
编程语言 时间:
2020-04-05 22:08:33
阅读次数:
58
share_ptr 简单实现: #include <iostream> using namespace std; template<class T> class SmartPtr { public: SmartPtr(T* ori_ptr); ~SmartPtr(); SmartPtr(SmartP ...
分类:
编程语言 时间:
2020-04-04 13:10:44
阅读次数:
69
在确保new动态分配的内存空间在使用结束之后,释放是一件麻烦事。C++11模板库的头文件中定义的智能指针,即shared_ptr模板,就是用来解决这个问题的。 它是将new运算符返回的指针p交给一个shared_ptr对象“托管”,就不用担心要在哪里写delete p语句 实际根本不需要编写这条语句 ...
分类:
编程语言 时间:
2020-03-30 23:06:56
阅读次数:
89
内容 1. 动态内存和智能指针 2. 动态数组 3. 使用库:文本查询程序 4. 总结 0. 摘要 动态分配的对象(dynamically allocated objects)的生命(lifetime)独立于其被创建的地方,他们一直会存在到被明确释放(free)。 为了让使用动态分配的对象更安全,库 ...
分类:
编程语言 时间:
2020-03-25 09:15:20
阅读次数:
87
概述 与shared_ptr不同,某个时刻只能有一个unique_ptr指向一个给定对象。当unique_ptr被销毁时,它所指向的对象也被销毁。同时,unique_ptr也没有类似于make_shared的标准库函数,当我们定义一个unique_ptr时,需要将其绑定到一个new返回的指针。因此初 ...
分类:
其他好文 时间:
2020-03-21 12:51:07
阅读次数:
64
在函数模板中使用智能指针时,可能会希望根据指针的类型推导出指针引用的对象类型作为模板参数,于是写出以下代码: shared_ptr<decltype(*objPtr)>(objPtr); 一眼看上去似乎是正确的,然而实际上隐藏着一个问题会导致错误,这要从decltype()推断出的类型说起。 dec ...
分类:
编程语言 时间:
2020-03-18 11:18:27
阅读次数:
95
std::optional有一个类似于智能指针的接口,它可以显式转化为bool来表示std::optional是否有一个值。指针的解引用操作符*和->都实现了,但是没有std::bad_optional_access,用这种方式访问一个空的std::optional是一个未定义的行为。reset() ...
分类:
其他好文 时间:
2020-03-16 23:19:10
阅读次数:
70
C++ 中动态内存管理通过一对运算符来完成: ,在动态内存中为对象分配空间并返回一个指向该对象的指针。 ,接受一个动态对象的指针,销毁该对象,并释放与之关联的内存。 新标准提供两种智能指针类型来管理动态对象,智能指针的行为类似常规指针,重要的区别是智能指针负责自动释放所指向的对象,新标准提供的这两种 ...
分类:
其他好文 时间:
2020-03-15 13:23:16
阅读次数:
54
在使用基本指针类型时,因为要手动释放指针指向的内存,常常容易造成内存泄漏,特别是异常分支很多的情况下。而智能指针类型就是将基本指针类型封装成模板类,以便更好地管理内存。 智能指针都包含一个explicit构造函数,因此基本指针类型不能隐式转换成智能指针,需要显式调用。 shared_ptr<doub ...
分类:
编程语言 时间:
2020-03-05 22:22:30
阅读次数:
116
```cpp #include #include static void interfaceOfSharedPtr(); int main(void) { interfaceOfSharedPtr(); return 0; } class Object { public: Object(int id... ...
分类:
编程语言 时间:
2020-02-24 21:06:37
阅读次数:
78