RAII是ResourceAcquisitionIsInitialization的简称,是C++语言的一种管理资源、避免泄漏的惯用法。利用的就是C++构造的对象最终会被销毁的原则。RAII的做法是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访问,使之始终保持有效,最后在对象析构的时候..
分类:
其他好文 时间:
2016-07-30 15:11:19
阅读次数:
157
以对象管理资源的观念常被称为“资源取得时机便是初始化时机”(RAII) auto_ptr被销毁时会自动删除它所指之物,所以一定要注意别让多个auto_ptr同时指向同一对象,否则对象会被删除多次,行为未定义 auto_ptr有一个性质:若通过拷贝构造函数或拷贝构造运算符复制它们,它们会变成NULL, ...
分类:
编程语言 时间:
2016-07-29 21:03:58
阅读次数:
229
1)请简述智能指针原理,并实现一个简单的智能指针智能指针作用:管理别人的指针,主要特点:RAII(ResourceAcquisitionIsInitialization)资源分配即初始化,定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正..
分类:
编程语言 时间:
2016-07-20 16:20:56
阅读次数:
271
本章主要描述多线程之间共享数据的方法、存在问题、解决方案。 第一部分:mutex在保护共享数据中的使用 1、最简单使用: 2、向lock_guard推进: 但是不推荐直接使用lock、unlock,因为unlock一定要调用,如果由于你的疏忽或前面的异常将会导致问题,再次利用RAII思想,用对象管理 ...
分类:
编程语言 时间:
2016-05-15 14:04:37
阅读次数:
344
首先,我们先提一下对Socket的封装(不复杂,所以简单说一下)。
Endian.h : 封装了字节序转换函数(全局函数,位于muduo::net::sockets名称空间中)。
SocketsOps.h/ SocketsOps.cc :封装了socket相关系统调用。
Socket.h/Socket.cc(Socket类): 用RAII方法封装socket file descrip...
分类:
其他好文 时间:
2016-04-16 02:03:15
阅读次数:
216
关于RAII,官方给出的解释是这样的“资源获取就是初始化”。听起来貌似不是很懂的哈,其实说的通俗点的话就是它是一种管理资源,避免内存泄漏的一种方法。它可以保证在各种情况下,当你对对象进行使用时先通过构造函数来进行资源的分配和初始化,最后通过析构函数来进行清理,..
分类:
其他好文 时间:
2016-04-15 23:20:17
阅读次数:
612
讲这个之前,先来看一个例子:voidTest1()
{
int*p1=newint(2);
//...
try
{
DoSomeThing();
}
catch(...)
{
deletep1;
throw;
}
//...
deletep1;
}这个例子,是通过C++异常处理机制,来管理动态开辟出来的内存,这是可以做到的。那如果我们以后new出来一块内存,都要这么做,..
分类:
编程语言 时间:
2016-04-07 01:42:40
阅读次数:
197
RAII:资源分配及初始化。但是这个翻译并没有显示出这个惯用法的真正内涵。RAII的好处在于它提供了一种资源自动管理的方式,当出现异常,回滚等现象时,RAII可以正确的释放资源。内存泄漏会导致:1.内存耗尽2.其他程序可能用不了了3.程序崩溃在资源的获取和释放之间,我们通常..
分类:
其他好文 时间:
2016-04-07 01:41:25
阅读次数:
204
RAII:资源分配即初始化,利用构造函数和析构函数定义一个类来完成对资源的分配和释放智能指针主要用来防止内存泄漏,我们来举个栗子,看看为什么会有智能指针这个东东例1:对于上面这段程序,由于抛出异常的时候影响了代码的执行流,所以要在异常捕获之前将p提前释放(详见我的..
分类:
编程语言 时间:
2016-04-07 01:39:39
阅读次数:
212