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