首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

问一个关于智能指针的傻有关问题

2012-02-29 
问一个关于智能指针的傻问题?各位大虾看看两个写法有何区别?1 - auto_ptrMyClass obj2 - MyClass obj

问一个关于智能指针的傻问题?
各位大虾看看两个写法有何区别?

1 - auto_ptr<MyClass> obj;
2 - MyClass obj;

智能指针的优势体现在哪里?


本人没用过标准库,请各位不要见笑···

[解决办法]
智能指针的主要好处是不用释放
[解决办法]
1 你没创建MyClass这个类
2 你创建MyClass这个类了.
[解决办法]
再看书
[解决办法]
在空闲存储区使用指向对象的指针有一个问题,就是不会自动析构该对象,换言之,当指针变量的生命周期结束时,在指针本身被销毁的同时它所指向的不会被自动销毁掉.因此,需要人为地调用delete,以调用对象的析构析构函数,从而释放占用的空间.如果不调用delete,就一定会出现内存泄漏.当然,堆栈对象不存在这个问题,因为它可以通过自动弹出对象来调用析构函数.
一个解决方法就是将指针隐藏在类类型对象中,为该类编写析构函数隐式地删除该对象指针所指向的空闲存储区中的对象.然后当该对象超出作用域后,析构函数被调用,这样就释放了指针所指向的对象占用的空间,显然就不会内存泄漏了.
令人高兴的是C++标准库中已存在一个非常好的与这些对象对应的类.即std::auto_ptr,它的定义在头文件memory中.


<摘自C++大学教程>
[解决办法]

探讨
楼上各位看不懂我的意思吗?

我是问在局部使用时,有谁会用new来构造一个类?

比如在下面这个函数里,要用一个局部变量:
void func()
{
MyClass *obj = new MyClass(); // 这里为何要new?如果不用new的话,auto_ptr又有何用?
MyClass obj; // 写成这样不行吗?}

[解决办法]
auto_ptr还真没用过...
[解决办法]
就是2楼说的,第一个还没创建对象.
[解决办法]
探讨
楼上各位看不懂我的意思吗?

我是问在局部使用时,有谁会用new来构造一个类?

比如在下面这个函数里,要用一个局部变量:
void func()
{
MyClass *obj = new MyClass(); // 这里为何要new?如果不用new的话,auto_ptr又有何用?
MyClass obj; // 写成这样不行吗?}



[解决办法]
比如MyClass是个抽象类,现在你要让它指向一个派生类的实例(它可能还是还是在另外一个地方创建的,例如一个factory实例),这个过程是肯定要new的,使用auto_ptr就可以防止忘记释放内存
[解决办法]
异常时,不会有内存泄漏。自动释放已分配内存
[解决办法]
不要忘记了,不使用指针的情况下是无法使用多态性的!
[解决办法]
智能指针会自动释放内存

热点排行