使用auto_ptr需要注意的事项】的更多相关文章

注:C++11 已不推荐使用,应使用scoped_ptr/shared_ptr. 部分原因就是如下的注意事项. 转自:http://patmusing.blog.163.com/blog/static/13583496020101824541270/ a. auto_ptr定义于头文件memory中: b. auto_ptr只能用来管理单个动态创建的对象,而不能管理动态创建的数组: c. 和其他copy和assign不同,auto_ptr的copy和assign会改变右边的操作数,assignm…
1.auto_ptr 不可以使用指针惯用的赋值初始化方式,只能直接初始化. 示例:  char *p = 'A';//error  auto_ptr<char>ptr = new char;//error,被当作普通指针对待了  auto_ptr<char>ptr4 = auto_ptr<char>(new char);//ok  auto_ptr<char>ptr4 = auto_ptr<char>(new char[100]);//ok 使用…
Q: 那个auto_ptr是什么东东啊?为什么没有auto_array?A: 哦,auto_ptr是一个很简单的资源封装类,是在<memory>头文件中定义的.它使用“资源分配即初始化”技术来保证资源在发生异常时也能被安全释放(“exception safety”).一个auto_ptr封装了一个指针,也可以被当作指针来使用.当其生命周期到了尽头,auto_ptr会自动释放指针.例如: #include<memory> using namespace std;  struct X…
在代码里面看到了auto_ptr这个东西,正好以前一哥们曾经问过我这个问题..所以特意去搜了搜帖子,学习学习 http://www.cnblogs.com/gaoxianzhi/p/4451803.html 头文件 : #include <memory> 使用 : std::auto_ptr 作用  : 动态分配对象以及当对象不再需要时自动执行清理(意思就是你不用再去关心什么时候delete了也不用担心发生异常会有内存泄漏) 实现 : 在C++中, auto_ptr是一个类,它用来实现对动态分…
转载:智能指针auto_ptr 很多人听说过标准auto_ptr智能指针机制,但并不是每个人都天天使用它.这真是个遗憾,因为auto_ptr优雅地解决了C++设计和编码中常见的问题,正确地使用它可以生成健壮的代码.本文阐述了如何正确运用auto_ptr来让你的代码更加安全——以及如何避免对auto_ptr危险但常见的误用,这些误用会引发间断性发作.难以诊断的bug. 1.为什么称它为“自动”指针?auto_ptr只是众多可能的智能指针之一.许多商业库提供了更复杂的智能指针,用途广泛而令人惊异,从…
C++ 与"类"有关的注意事项总结(一) 1. 除了静态 static 数据成员外,数据成员不能在类体中被显式地初始化. 例如 : class First { int memi = 0; // 错误 double memd = 0.0; // 错误 }; 类的数据成员通过类的构造函数进行初始化. 2. 我们可以声明一个类但是并不定义它. 例如: class Screen; // Screen 类的声明 这个声明向程序引入了一个名字 Screen,指示 Screen为一个类类型. 但是我…
C++智能指针 auto_ptr auto_ptr 是一个轻量级的智能指针, 定义于 memory (非memory.h)中, 命名空间为 std. auto_ptr 适合用来管理生命周期比较短或者不会被远距离传递的动态对象, 最好是局限于某个函数内部或者是某个类的内部. 使用方法: std::auto_ptr<int> pt(new int(10)); pt.reset(new int(11)); 成员函数 3个重要的函数: (1) get 获得内部对象的指针, 由于已经重载了()方法, 因…
auto_ptr是一个模板类,用于管理动态内存分配. 请看下面的函数: void remodel (string& str) { string * ps = new string(str); ... str = *ps; return; } 上述代码存在这样一个缺陷:没有收回函数中分配的内存. 解决方法:在return前加上delete,如下所示: void remodel (string& str) { string * ps = new string(str); ... str = *…
shared_ptr:计数的智能指针 它是一个包装了new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针 ,可以被自由地拷贝和赋值,在任意的地方共享它,当没有代码使用(引用计数为0)它时才删除被包装的动态分配的对象.shared_ptr也可以安全地放到标准容器中,并弥补了auto_ptr因为转移语义而不能把指针作为STL容器元素的缺陷. 线程安全性: shared_ptr 本身不是 100% 线程安全的.它的引用计数本身是安全且无锁的,但对象的读写则不是,因为 shared_ptr…
auto_ptr是C++标准库提供的类模板,头文件<memory>,auto_ptr对象通过初始化指向由new创建的动态内存,它是这块内存的拥有者,一块内存不能同一时候被分给两个拥有者.当auto_ptr对象生命周期结束时,其析构函数会将auto_ptr对象拥有的动态内存自己主动释放. 即使发生异常,通过异常的栈展开过程也能将动态内存释放.auto_ptr不支持new数组. auto_ptr的出现,主要是为了解决"有异常抛出时发生内存泄漏"的问题.例如以下的简单代码是这类问…