智能指针简单实现
2010-04-18 12:45
162 查看
今天稍微看了下boost库中的智能指针,我们知道在C/C++编程领域最臭名昭著的就是资源管理问题,而boost库能在一定程度上缓解。
当然,boost库博大精深,光智能指针就有好几种,在此我先简单示范下scoped_ptr的实现,以后如有心得再添加。
scoped_ptr用于此种情形:在函数域内,只要你用scoped_ptr申请了资源,在退出函数时,就能保证资源被销毁。下面来看下是如何实现的
template <class T>
class scoped_ptr {
T* px;
scoped_ptr(T* p=0):px(p) {
printf("a scoped_ptr was created!\n");
}
~scoped_ptr(void) {
delete px;
}
T& operator*(void) const {
assert(px);
return *px;
}
T* operator->(void) const {
assert(px);
return px;
}
};
我们来测试一下,先定义一个类
class A {
A(void) {
printf("an instance of A was created!\n");
}
~A(void) {
printf("the instance of A was destroyed!\n");
}
};
int main(void)
{
scoped_ptr<A> aptr(new A);
return 0;
}
注意main函数中在堆中分配了一个A的实例,但是并没有调用delete,不过程序还是打印出了"the instance of A was destroyed!",说明main函数确实调用了A的析构函数。这是为什么呢?关键在于函数栈的机制,aptr在main函数退出时会被销毁,系统会调用aptr的析构函数,而aptr的析构函数正好把A delete掉了。
当然,boost库博大精深,光智能指针就有好几种,在此我先简单示范下scoped_ptr的实现,以后如有心得再添加。
scoped_ptr用于此种情形:在函数域内,只要你用scoped_ptr申请了资源,在退出函数时,就能保证资源被销毁。下面来看下是如何实现的
template <class T>
class scoped_ptr {
T* px;
scoped_ptr(T* p=0):px(p) {
printf("a scoped_ptr was created!\n");
}
~scoped_ptr(void) {
delete px;
}
T& operator*(void) const {
assert(px);
return *px;
}
T* operator->(void) const {
assert(px);
return px;
}
};
我们来测试一下,先定义一个类
class A {
A(void) {
printf("an instance of A was created!\n");
}
~A(void) {
printf("the instance of A was destroyed!\n");
}
};
int main(void)
{
scoped_ptr<A> aptr(new A);
return 0;
}
注意main函数中在堆中分配了一个A的实例,但是并没有调用delete,不过程序还是打印出了"the instance of A was destroyed!",说明main函数确实调用了A的析构函数。这是为什么呢?关键在于函数栈的机制,aptr在main函数退出时会被销毁,系统会调用aptr的析构函数,而aptr的析构函数正好把A delete掉了。
相关文章推荐
- C++ 智能指针——简单实现以及循环引用问题
- 用c++简单实现智能指针
- 实现一个简单的智能指针
- 用c++简单实现智能指针(转)
- C++中智能指针的工作原理和简单实现
- 简单模拟实现c++智能指针-指针移交控制权
- C++ 几种智能指针的简单实现
- [8]C++智能指针的简单实现
- 智能指针原理,并实现一个简单的智能指针
- C++智能指针,指针容器原理及简单实现(auto_ptr,scoped_ptr,ptr_vector).
- C++ 几种智能指针的简单实现
- 请简述智能指针原理,并实现一个简单的智能指针。
- c++智能指针的原理与简单实现
- 一个简单的智能指针实现
- 最简单的智能指针实现方法
- C++ 引用计数技术及智能指针的简单实现
- 【C++】智能指针auto_ptr简单的实现
- C++智能指针及其简单实现
- C++智能指针及其简单实现
- C++智能指针及其简单实现