简单例子如下:

#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

相关文章:

  • 2021-06-11
  • 2022-12-23
  • 2021-12-11
  • 2022-01-27
  • 2021-05-20
  • 2021-06-06
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-15
  • 2021-10-29
  • 2021-11-22
  • 2021-10-08
  • 2021-08-25
  • 2021-12-02
  • 2021-06-25
相关资源
相似解决方案