动态数组
C++语言定义了另外一种new表达式语法,可以分配并初始化一个对象数组。标准库中包含
一个名为allocator的类,允许我们将分配和初始化分离。
12.2.1 new和数组
void fun1()
{
int *pia=new int[2]; //pia指向第一个int
//方括号中的大小必须是整型,但不必是常量
typedef int arrT[42...
分类:
编程语言 时间:
2014-07-10 19:39:17
阅读次数:
336
动态内存与智能指针(3)
/**
* 功能:动态内存与智能指针
* 时间:2014年7月8日15:33:58
* 作者:cutter_point
*/
#include
#include
#include
#include
using namespace std;
/**
智能指针和异常
*/
void f()
{
shared_ptr sp(new int(42)); ...
分类:
编程语言 时间:
2014-07-09 09:08:04
阅读次数:
161
1、定义shared_ptr的作用有如同指针,但会记录有多少个shared_ptrs共同指向一个对象。这便是所谓的引用计数(reference counting)。一旦最后一个这样的指针被销毁,也就是一旦某个对象的引用计数变为0,这个对象会被自动删除。这在非环形数据结构中防止资源泄露很有帮助。aut...
分类:
编程语言 时间:
2014-07-09 00:36:15
阅读次数:
250
不可否认,资源泄露(resource leak)曾经是C++程序的一大噩梦.垃圾回收 机制(Garbage Collection)一时颇受注目.然而垃圾自动回收机制并不能 满足内存管理的即时性和可视性,往往使高傲的程序设计者感到不自在. 况且,C++实现没有引入这种机制...
分类:
编程语言 时间:
2014-07-08 23:45:57
阅读次数:
348
unique_ptr是一个独享所有权的智能指针,它提供了一种严格语义上的所有权,包括:
1、拥有它所指向的对象。
2、无法进行复制构造,也无法进行复制赋值操作。也就是说,我们无法得到指向同一个对象的两个unique_ptr。但是可以进行移动构造和移动赋值操作。
3、保存指向某个对象的指针,当它本身被删除释放的时候(比如,离开了某个作用域),会使用给定的删除器释放它指向...
分类:
编程语言 时间:
2014-07-08 17:23:41
阅读次数:
271
weak_ptr是对对象的一种弱引用,它不会增加对象的引用计数。weak_ptr和shared_ptr之间可以相互转换,shared_ptr可以直接赋值给week_ptr,week_ptr可通过调用lock函数来获得shared_ptr(如果对象已经被释放,则返回一个空的shared_ptr)。
单纯使用shared_ptr有时会产生问题,考虑下面的代码:
1 class...
分类:
编程语言 时间:
2014-07-08 17:10:39
阅读次数:
289
动态内存与智能指针(2)
直接管理内存
void fun1()
{
//此new表达式在自由空间构造一个int型对象,并返回指向该对象的指针
int *pi1=new int; //pi指向一个动态分配、未初始化的无名对象
string *ps3=new string; //初始化为空string
int *pi2=new int; ...
分类:
编程语言 时间:
2014-07-08 15:51:21
阅读次数:
269
这里先介绍auto_ptr的缺陷:
因为auto_ptr并不是完美无缺的,它的确很方便,但也有缺陷,在使用时要注意避免。首先,不要将auto_ptr对象作为STL容器的元素。C++标准明确禁止这样做,否则可能会碰到不可预见的结果
auto_ptr的另一个缺陷是将数组作为auto_ptr的参数: auto_ptr pstr (new char[12] ); //数组;为定义
然后释放资源...
分类:
编程语言 时间:
2014-07-08 14:38:50
阅读次数:
240
shared_ptr是一个引用计数智能指针,用于共享对象的所有权。它可以从一个裸指针、另一个shared_ptr、一个auto_ptr、或者一个weak_ptr构造。还可以传递第二个参数给shared_ptr的构造函数,它被称为删除器(deleter)。删除器用于处理共享资源的释放,这对于管理那些不是用new分配也不是用delete释放的资源时非常有用。shared_ptr被创建后,就可以像普通指...
分类:
编程语言 时间:
2014-07-08 13:26:57
阅读次数:
191
一、智能指针
tr1::shared_ptr和tr1::weak_ptr。前者的作用有如内置指针,但会记录有多少个tr::shared_ptrs共同指向同一个对象,这便是所谓的引用计数。一旦最后一个这样的指针被销毁,也就是一旦某一个对象的引用计数为0,这个对象会被自动删除。这在非环形数据结构中防止资源泄露很有帮助,但如果两个或多个对象内含tr1::shared_ptrs并形成环状,...
分类:
其他好文 时间:
2014-07-06 11:43:58
阅读次数:
186