ICE::Handle 使用崩溃问题

简单例子如下:

#include "Ice/Ice.h"
#include "IceUtil/IceUtil.h"
#include "Printer.h"

using namespace std;
using namespace Hello;

class MyClass;
typedef IceUtil::Handle<MyClass> MyClassPtr;
class MyClass : public IceUtil::Shared{
public:
                MyClass( int i) : _i(i){
                                {
                                                MyClassPtr ptr = this; //赋值后ref=1,过作用域后delete
                                }
                                
                                MyClassPtr ptr2 = this;
                }
                 int get_val(){return _i;}
private:
                 int _i;
};

int main(int argc, char* argv[])
{
                MyClassPtr ptr = new MyClass(1);

                 return 0;
}

  上例中可以看到在构造函数中将this指针赋值给ICE智能指针p,在出了p的作用域后,智能指针就释放了p指针指向的内存(delete this),此时类还未构造完,很容易出问题,因此,最好不要在类构造函数做这些操作,具体构造期间哪些是可操作可参考:http://www.vckbase.com/index.php/wv/688

posted @ 2013-10-18 00:30  good90  阅读(1058)  评论(0编辑  收藏  举报