Here are two simple questions. Problem A #include <string> include <iostream> using namespace std; class vehicle { public: vehicle(const string& name); virtual ~vehicle(){} void PrintOwnerInfo(); private: string driver_name_; }; vehicle::v…
13.8 Write a smart pointer class. A smart pointer is a data type, usually implemented with templates, that simulates a pointer while also providing automatic garbage collection. It automatically counts the number of references to a SmartPointer<T*>…
unique_ptr最先在boost中被定义,后来被C++标准委员会选中为C++11的feature之一. std::unique_ptr is a smart pointer that retains sole ownership of an object through a pointer and destroys that object when the unique_ptr goes out of scope. No two unique_ptr instances can manage…
智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露.它的一种通用实现技术是使用引用计数(reference count).智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针.每次创建类的新对象时,初始化指针并将引用计数置为1:当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数:对一个对象进行赋值时,赋值操作符减少左操作数所指对象的引用计数(如果…
(一)首先对智能指针有一些概念性的了解 **********本部分内容摘自开源中国社区http://my.oschina.net/u/158589/blog/28994******** 1.什么是智能指针? 智能指针(Smart Pointer),简单来说,就是用起来像指针,但是很聪明,可以自己在适当的时候删除动态分配的对象的指针. 2.什么时候使用智能指针? 智能指针主要用于生存期控制和阶段控制.比如,在一个类中,如果有指针成员,那么,如果类写的不够小心,就很容易出异常.因为指针指向的动态内存…
标准库 智能指针( smart pointer ) 是啥玩意儿 一,为什么有智能指针??? c++程序员需要自己善后自己动态开辟的内存,一旦忘了释放,内存就泄露. 智能指针可以帮助程序员"自动释放"自己开辟的内存. 二,从哪里看出来智能了??? int *p = new int(11); auto_ptr<int> pa(p);//auto_ptr已经不推荐使用 //delete p; 上面的代码把p交给智能指针auto_ptr管理后,就不需要自己去delete p.aut…
  在C++中,程序员可以直接操作内存,给编程增加了不少的灵活性.但是灵活性是有代价的,程序员必须负责自己负责释放自己申请的内存,否则就会出现内存泄露.智能指针就是为了解决这个问题而存在的.它和其他指针没有本质的区别,主要的目的就是为了避免悬挂指针.内存泄露的问题.在这里,我使用对象的应用计数做了一个smart pointer,当一个对象还有引用的时候,就不执行释放内存的操作,当引用计数为0时,就执行内存释放操作,并且将指针重置为NULL. 代码如下: #include <iostream>…
If you trying to do multiple things in one statement, you should think carefully abnormal behavior especially exceptions. Let's see an example: processWidget(std::tr1::shared_ptr<Widget>(new Widget()), priority()); What you expected might be new Wid…
Smart pointer line 58之后smart pointer里的计数已经是0,所以会真正释放它引用的对象,调用被引用对象的析构函数.如果继续用指针访问,会出现如下图的内存访问异常.所以说如果选择了用智能指针,就不要再试图用其他方式再去访问对象了. // sharedTest.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <boost/…
smart pointer是一种abstract data type,它可以模仿指针的行为,而且额外提供了一系列诸如自己主动内存管理.边界检查等特性,这些特性是为了在保证效率的基础上降低因为对指针的不正常使用而带来的bug. smart pointer可以自己主动进行object的销毁:当某个object的最后一个拥有者被destroy的时候(如局部变量离开了作用域).由smart pointer管理的object会被自己主动销毁.smart pointer是被声明在stack中的 在C++中.…