比如Pen* pen = new Pen(Color::Blue, 1);
如果我delete pen;析构会有问题,好像是debug时会有int3的user breakpoint。网上查到好像应该用dispose(),但是Pen中并无此函数。我用new主要是想实现这样一个功能,有一个函数叫MyDrawLine(int iOption),在OnPaint中调用,MyDrawLine负责画线,画笔由iOption指定,然后根据iOption将具体的画笔赋值给pen指针,后面直接就用pen指针来画了,但是这样的话在MyDrawLine末尾我不知道如何析构pen指针指向的对象?void MyClass::MyDrawLine(int iOption)
{
  Pen* pen;
  if (iOption == 0)
    pen = new Pen(Color::Blue, 1);
  else if (iOption == 1)
    pen = new Pen(Color::Red, 1);
....
}我想到的另一种方法就是将Pen对象设成类的成员,然后在类的初始化列表中构造出来
CMyStatic::CMyStatic(CWnd* pParent, int iGraphX, int iGraphY, bool bPolicy)
:penD(Color::Black, 1), penR(Color::Blue, 1), penU(Color::Blue, 1), penK(Color::Gray, 1), penG(Color::Black, 3), 
penI(Color::Red, 2)
{}
但是这样取得的penD等的lastResult显示GdiplusNotInitialized,应该是初始化未成功,这个也不知道怎么解决。当然如果能够解决的话,第二种方法应该效率高一些。请问这两种方法应该如何才能正确实现?

解决方案 »

  1.   

    改 pen = ::new Pen(Color::Blue, 1);
     
    程序最后退出,或者析构时
    GdiplusShutdown(gdiplusToken);
      

  2.   

    动态创建的是在堆上的分配的,那么就要手动释放掉(delete掉),在栈上的一般是函数的局部变量,在作用域结束时自动回收。注意内存泄露
      

  3.   

    回vieri_ch:
    请问pen = new Pen(Color::Blue, 1);与pen = ::new Pen(Color::Blue, 1);有什么区别吗?你是指加了::后我delete就不会出错是吗?回xuying123456:
    请注意看第一段:)
    如果我delete pen;析构会有问题,好像是debug时会有int3的user breakpoint。网上查到好像应该用dispose(),但是Pen中并无此函数。