Smart pointer 智能指针小总结
Smart pointer
line 58之后smart pointer里的计数已经是0,所以会真正释放它引用的对象,调用被引用对象的析构函数。如果继续用指针访问,会出现如下图的内存访问异常。所以说如果选择了用智能指针,就不要再试图用其他方式再去访问对象了。

// sharedTest.cpp : Defines the entry point for the console application.
// #include "stdafx.h"
#include <boost/make_shared.hpp>
#include <vector>
//using namespace std;
using namespace boost; #define SMART_PTR shared_ptr class Based
{
protected:
int a;
char* pa; public:
Based():a()
{
pa = new char[];
} void Func(){ std::cout<<"Func "<<a<<std::endl; }
virtual ~Based()
{
delete[] pa;
std::cout<<"deconstrctor"<<std::endl;
}
}; class Foo : public Based
{
private:
int b; public:
void Test()
{
this->b = ;
this->pa[] = 'b';
std::cout<<"Test(), b = "<<this->b<<"this->pa[0] = "<<this->pa[]<<std::endl;
} ~Foo(){ std::cout<<"~Foo()"<<std::endl;}
}; int main (int argc, const char * argv[])
{
Foo * pfoo = new Foo; std::cout<<"{"<<std::endl;
{
SMART_PTR<Foo> smart_foo(pfoo);
smart_foo->Test();
}
std::cout<<"}"<<std::endl; pfoo->Test(); return ;
}
Smart pointer 智能指针小总结的更多相关文章
- C++2.0新特性(六)——<Smart Pointer(智能指针)之shared_ptr>
Smart Pointer(智能指针)指的是一类指针,并不是单一某一个指针,它能知道自己被引用的个数以至于在最后一个引用消失时销毁它指向的对象,本文主要介绍C++2.0提供的新东西 一.Smart P ...
- [CareerCup] 13.8 Smart Pointer 智能指针
13.8 Write a smart pointer class. A smart pointer is a data type, usually implemented with templates ...
- C++ smart pointer智能指针
在C++中,程序员可以直接操作内存,给编程增加了不少的灵活性.但是灵活性是有代价的,程序员必须负责自己负责释放自己申请的内存,否则就会出现内存泄露.智能指针就是为了解决这个问题而存在的.它和其他指 ...
- C++2.0新特性(八)——<Smart Pointer(智能指针)之unique_ptr>
一.概念介绍 unique_ptr它是一种在异常发生时可帮助避免资源泄露的smart pointer,实现了独占式拥有的概念,意味着它可确保一个对象和其他相应资源在同一时间只被一个pointer拥有, ...
- C++2.0新特性(七)——<Smart Pointer(智能指针)之weak_ptr>
一.weak_ptr出现的意义 上一节提到过shared_ptr,它会自动释放“不再需要使用的对象”的相应的资源,但是它不是万能的,在某些时候(比如说循环引用),它会显得力不从心,这就是weak_pt ...
- Smart Pointer 智能指针
P76 参考:http://www.cnblogs.com/lanxuezaipiao/p/4132096.html http://blog.csdn.net/hackbuteer1/article/ ...
- C++11特性 - Smart Pointers 智能指针
已经有成千上万的文章讨论这个问题了,所以我只想说:现在能使用的,带引用计数,并且能自动释放内存的智能指针包括以下几种: unique_ptr: 如果内存资源的所有权不需要共享,就应当使 ...
- 智能指针 shared_ptr 解析
近期正在进行<Effective C++>的第二遍阅读,书里面多个条款涉及到了shared_ptr智能指针,介绍的太分散,学习起来麻烦.写篇blog整理一下. LinJM @HQU s ...
- c/c++ 标准库 智能指针( smart pointer ) 是啥玩意儿
标准库 智能指针( smart pointer ) 是啥玩意儿 一,为什么有智能指针??? c++程序员需要自己善后自己动态开辟的内存,一旦忘了释放,内存就泄露. 智能指针可以帮助程序员"自 ...
随机推荐
- SQL表操作习题6 36~45题
- 如何获取Class的所有方法
// 取得所有方法 Method[] hideMethod =Activity.class.getMethods(); int i = 0; for (; i < hideMethod.leng ...
- dragon-book-exercise-answers
https://github.com/fool2fish/dragon-book-exercise-answers
- [bug]The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
写在前面 在模拟请求的时候,如果url为https的,会报这个错误.大概错误就是:基础连接已关闭:无法建立信任关系的SSL / TLS的安全通道. The underlying connection ...
- 模拟Spring中的getBean方法
一直知道Spring是运用反射技术的,但具体怎么用呢?今天就模拟下getBean方法. 步骤: 1.用Dom4j解析xml配置文件,取出我们需要的信息 2.遍历Bean节点,根据每个Bean节点的cl ...
- CSS3:2D转换方法
利用transform 可以实现旋转.缩放.倾斜.移动 属性有:translate.scale 移动: translateX(10px); //水平方向移动10px translateY(50px); ...
- Winform 遍历 ListBox中的所有项
foreach(DataRowView row in listBox.Items ) { MessageBox.Show(row["displayMember"].ToString ...
- Tomcat部署多个应用时日志文件路径相同引起的问题
今天给客户部署新系统,一个 前台应用,一个后台应用,由于用的是同一个架子,日志文件路径也没改,所以两个应用的日志文件是同一个文件,这样应用运行时,就会出现只能访问一个应用的情况,如果两个应用同时访问, ...
- nginx rewrite不支持if 嵌套也不支持逻辑或和逻辑并
如题,apache的rewrite是支持或者的,用个OR就可以,如果不加OR,多个RewriteCond 罗列累加就是并且的意思.然后nginx的rewrite就没有这么好了.那么如何去实现这样复杂的 ...
- yolo.v2 darknet19结构
Darknet19( (conv1s): Sequential( (0): Sequential( (0): Conv2d_BatchNorm( (conv): Conv2d(3, 32, kerne ...