资源获取即初始化 (Resource Acquisition Is Initialization, RAII),RAII是一种资源管理机制,资源的有效期与持有资源的对象生命期严格绑定,即由对象的构造函数完成资源的分配,由析构函数完成资源的释放,总结一句话就是 用对象来管理资源 RAII实现原理 当一个对象离开作用域的时候就会被释放,会调用这个对象类的析构函数...
当然, 我们首先要确保这个智能指针确实拥有某个对象,否则,这个操作的行为即对空指针的提领是未定义的。 四,辅助函数 1) get用来显式的返回auto_ptr所拥有的对象指针。我们可以发现,标准库提供的auto_ptr既不提供从“裸”指针到auto_ptr的隐式转换(构造函数为explicit),也不提供从auto_ptr到“裸”指针的隐式转...
(1)从较浅的层面看,智能指针是利用了一种叫做RAII(资源获取即初始化)的技术对普通的指针进行封装,这使得智能指针实质是一个对象,行为表现的却像一个指针。 (2)智能指针的作用是防止忘记调用delete释放内存和程序异常的进入catch块忘记释放内存。另外指针的释放时机也是非常有考究的,多次释放同一个指针会造成程序崩溃...
CAutoPtr::operator ->指向成员的指针的运算符。 公共数据成员 “属性”描述 CAutoPtr::m_p指针数据成员变量。 注解 此类提供用于创建和管理映射对象的方法。 智能指针有助于防止内存泄漏,方法是在资源超出范围时自动释放资源。 此外,CAutoPtr的复制构造函数和赋值运算符转移指针的所有权,将源指针复制到目标指针,...
我很喜欢新的C++11的智能指针。在很多时候,对很多讨厌自己管理内存的人来说是天赐的礼物。在我看来,C++11的智能指针能使得C++新手教学更简单。 其实,我已经使用C++11两年多了,我无意中发现多种错误使用C++11智能指针的案例,这些错误会使程序效率很低或者直接崩溃。为了方便查找,我把它们按照下文进行了归类。
//使用智能指针类对象时调用的接口,作用同上 template <typename Wrapper> static inline typename Wrapper::pointer getPtr(const Wrapper &p) { return p.get(); // get()是unique_ptr中的方法,作用是获取智能管理指针 } #define Q_DECLARE_PRIVATE(Class) \ ...
智能指针使用:shared_ptr、weak_ptr、unique_ptr等 关键字的作用:static、const、volatile、extern 四种类型转换:static_cast, dynamic_cast, const_cast, reinterpret_cast STL部分容器的实现原理,如 vector、deque、map、set、 hashmap 泛型编程:模板(了解一下) 内存模型:编译链接机制、内存布局(memory layout)、对...
名字的左值:该名字代表的存储单元的地址;名字的右值:该名字代表的存贮单元的内容。 智能指针 // 初始化方式1 std::unique_ptr<int> up1(new int(1)); std::unique_ptr<int[]> up2(new int[3]); // 初始化方式2 std::unique_ptr<int> up3; up3.reset(new int(1)); std::unique_ptr<int[]>...
建议:C++代码代码中多注意使用智能指针 2 不要使用野指针 野指针也叫悬挂指针,是指向“垃圾”内存的指针,使用“野指针”会让程序出现不确定的行为。 注意,野指针不是NULL指针, 它比NULL指针更容易犯错,因为它不能通过形如 if (NULL == p)的判断语句来预防,只能我们自己在写代码时多注意。 指针p被free或者del...