1 new abc()是创建个临时对象吗?2 如果abc类是个窗体类 abc a = new() 后面需要 a.showwindow() 那用 new abc()时该怎么写showwindow()函数?
  是在abc的构造函数中写吗?3 这两种方法各自的优势是什么,一般用在什么地方?

解决方案 »

  1.   

    回1楼:
    我是看DuiLib开源界面库时遇到的:调用处
    CRect rcWindow;
    GetWindowRect(m_hWnd, &rcWindow);
    rcWindow.top = rcWindow.top + msg.pSender->GetPos().bottom;
    new ColorSkinWindow(this, rcWindow);类的构造函数:ColorSkinWindow::ColorSkinWindow(MainFrame* main_frame, RECT rcParentWindow)
    : main_frame_(main_frame)
    , parent_window_rect_(rcParentWindow)
    {
    Create(NULL, _T("colorskin"), WS_POPUP, WS_EX_TOOLWINDOW, 0, 0);
    ShowWindow(true);
    }
      

  2.   

    ColorSkinWindow类应该是重载了new操作符,否则上面的内存泄漏怎么解决?
    是不是要保存一个临时变量,是要看代码要求的,比如你要操作:
    a->b->c->d->e;那你是不是觉得这样:
    E e = a->b->c->d->e;
    e->...
    更好一点呢?
      

  3.   

    应该是在类里面释放内存的void ColorSkinWindow::OnFinalMessage(HWND hWnd)
    {
    WindowImplBase::OnFinalMessage(hWnd);
    delete this;
    }
      

  4.   

    new了一个东西之后,并不是内存泄露,因为可以在new的对象里面处理。特别是当前是新建的一个窗口
      

  5.   

    1 new abc()是创建个临时对象吗?
    ===========
    问题是这种创建方式创建的对象如何引用呢?如何释放呢?
      

  6.   

    abc a = new() 
    不应该这样写.
      

  7.   

    我觉得应该是类来管理释放,在这个程序里在该窗口失去焦点时(OnKillFocus)会调用关闭窗口程序并释放资源
    void ColorSkinWindow::OnFinalMessage(HWND hWnd)
    {
    CDUIWnd::OnFinalMessage(hWnd);
    delete this;
    }
      

  8.   

    回8楼,是写错了
    abc *a = new abc();
      

  9.   

    1.不是临时对象,是堆上的
    2.(new abc())->ShowWindow(SW_SHOW),但构造函数里一定要Create否则无法显示
    3.第一种方法比较罕见,正常情况下恐怕没人推荐,虽然我们的项目里有些地方用到这种方法了;第二种常见
      

  10.   

    看到过一同事用第一个作为参数的用法。。
    就是函数需要一指针 。而直接用F(new abc())。
      

  11.   

    1.第一个叫无名对象,堆上面的,跟NEW在一起混的都这样,有用的,有时候入参什么的就这么用。
    2.指针就这么new,对象实体初始化不用这么复杂abc a;就已经初始化了
    3.看你怎么用了,new的生命周期都要自己控制的,不然就内存泄漏。实体会根据其位置来对应上生命周期。自动释放(主要会自动调用析构函数)
      

  12.   

    class Abc : public CWnd
    {
    ……
    }
     new Abc()这是在堆上分配内存,并调用类Abc的默认参数的构造函数,返回值是一个指向Abc实体的指针
    其通常调用如下:
    Abc * p = new Abc();或 Abc * p = new Abc;(调用Abc的默认构造函数)
    p->showwindow(SW_SHOW);
    对于Abc a = new()这种我没见过,估计编译会有问题,
    若是
    Abc a;
    a.ShowWindow(SW_SHOW);
    对象a处于栈内存中,其分配释放内存速度略快与堆内存。
      

  13.   


    您好,
    由于您长时间不结贴,上一次答复已超一个月并且已有最佳答案,本人帮你结贴。
    若是觉得答案不嘉,请放在本版的疑难杂症帖链接:
    http://bbs.csdn.net/topics/390351579。
    如果您有什么意见,请您联系我。