c++ 普通全局变量与指针类型的对象变量 应用区别
来源:互联网 发布:北京银行安全控件mac 编辑:程序博客网 时间:2024/06/01 22:07
这里举例一下MFC中的CPtrArray类,他是CObject类型指针对象的集合。通过int Add( CObject* newElement );注意参数是一个指针类型)可以向集合中添加元素。首先我们定义一个CPtrArray类型的对象。
CPtrArray pArray;
//他是一个全局对象
先设定一个举例的类类型。如:
01
class
A
02
{
03
public
:
04
A(
int
i)
05
{
06
a = i;
07
}
08
~A(){}
09
public
:
10
int
a;
11
};
现在我们需要在某个函数中要实现将一个A类型对象数据加入到一个CPtrArray对象中。此函数func1()如下:
void
func1()
2
{
3
//首先定义一个A类型的对象
4
A a(1);
5
//使用pArray对象中的成员函数将此对象加入到容器中
6
pArray.Add(&a);
7
}
01
void
func2()
02
{
03
//首先声明一个A类型的对象
04
A* a;
05
//使用pArray对象中的成员函数GetAt()将A类型的对象取出
06
for
(
int
i; i < pArray.GetSize();i++)
07
{
08
a = (A*)pArray.GetAt(i);
09
//使用A中的数据进行相关的操作代码
10
...
11
}
12
}
pArray保存a保存资源的地址;
func1函数执行完成,a发生析构,资源不可用;
原来在func1()函数中,a对象是一个局部对象,当我们使用pArray.Add(&a);我们将a对象的地址保存到pArray对象中。但是作为局部对象,当func1执行完成后,资源需要回收,此时我们定义的a对象也在A类中的析构函数中被析构释放资源!而当我们在fun2()函数中执行取出保存的对象时,实际是根据保存的地址去内存中找到数据,虽然此时我们能能够找到此地址,但是这个地址上面的数据并不是我们需要的了!!!所以才发生面的情况!那么怎么才能解决呢?看下面,我们只需更改func1函数中的一行代码:
1
void
func1()
2
{
3
//首先定义一个A类型的对象
4
//A a(1);//为对比,只是注释原来那句
5
A* a =
new
A(1);
6
//使用pArray对象中的成员函数将此对象加入到容器中
7
pArray.Add(a);
8
}
pArray中保存a指向资源的地址;
func1函数执行完成,a对象发生析构,pArray根据地址还能能够访问到之前的资源;
对,是要析构,但是,我们在pArray.Add(a);中加入的是a对象资源的地址,我们先看看A* a = new A(1);在堆中分配资源,我们知道,在堆中分配的资源是在跟程序的生命周期是一致的。a对象虽然析构了(不存在了),因为a也是一个指针,a指针也就是保存这个资源的地址!我们在pArray中保存的a的地址出的资源并没有析构!所以在func2函数中我们还能够使用此地址访问此地址对应的资源!
- c++ 普通全局变量与指针类型的对象变量 应用区别
- 解析C++普通局部变量与指针类型的对象变量的应用区别
- 解析C++普通局部变量与指针类型的对象变量的应用区别
- [转]解析C++普通局部变量与指针类型的对象变量的应用区别
- static全局变量与普通全局变量/static局部变量与普通局部变量/static函数与普通函数的区别
- static全局变量与普通的全局变量、static局部变量和普通局部变量、static函数与普通函数的区别
- static全局变量与普通的全局变量和普通局部变量的区别,static函数与普通函数的区别
- static全局变量,局部变量,函数与普通全局变量,局部变量和函数的区别
- static全局变量,局部变量,函数与普通全局变量,局部变量和函数的区别
- static全局变量,局部变量,函数与普通全局变量,局部变量和函数的区别
- static全局变量,static局部变量,static函数与全局变量,局部变量,普通函数的区别
- static全局变量与普通的全局变量区别
- static全局变量与普通全局变量的区别
- static全局变量与普通全局变量的区别?static局部变量与普通局部变量的区别?static函数与普通函数的区别?
- static全局变量与普通全局变量的区别?static局部变量与普通局部变量的区别?static全局函数与普通全局函数的区别?
- static 全局变量与普通的全局变量的区别/static局部变量和普通局部变量的区别/static函数与普通函数的区别[转]
- static全局变量与普通的全局变量的区别/static局部变量和普通局部变量的区别/static函数与普通函数的区别
- static全局变量与普通的全局变量的区别/static局部变量和普通局部变量的区别/static函数与普通函数的区别
- 使用JQuery插件pagination实现AJax无刷新分页
- 我国第二款隐形战机歼-31昨日成功首飞(图)
- 剡剡提供伤感QQ日志_这悲伤的悲魂曲里的音符
- Oracle 10g 创建表空间的完整步骤详解
- SQL笔记 --- SQL Server
- c++ 普通全局变量与指针类型的对象变量 应用区别
- mac终端命令大全介绍
- SQL笔记 --- 数据查询,数据更新,触发器
- 定时重启电脑或服务器
- java中List对象转换为JSON对象
- SharePoint 2010 人物搜索的问题
- 2012年免费获取黑马程序员JavaEE+Android学习光盘
- 总结2004年至现在,我的程序员人生路
- 注意 ` ` 和 " " 的区别