【问题标题】:Do I need to delete this object? [closed]我需要删除这个对象吗? [关闭]
【发布时间】:2016-03-28 11:28:44
【问题描述】:

在使用 Direct2D 的 MFC 应用程序中,我有非常简单的代码:
//在ctor中:

EnableD2DSupport();
m_pBlackBrush = new CD2DSolidColorBrush(GetRenderTarget(), D2D1::ColorF(D2D1::ColorF::Black));  

现在的问题是,我应该在 m_pBlackBrush 上调用 delete 吗?如果是在哪里?我试图在析构函数中调用 delete ,但我收到错误消息,说存在写访问冲突。任何人都知道我是应该删除这个画笔还是干脆离开它(这似乎很奇怪)?

【问题讨论】:

  • 确定你需要delete这个对象,当你使用new创建它时,否则你会有内存泄漏。
  • 这可能取决于你如何使用它。我记得 MFC 对对象所有权有奇怪的想法,所以,如果你把画笔放在设备上下文中,它可能会假设所有权。抱歉,我不记得细节了。
  • @πάνταῥεῖ 你看了我的帖子了吗?我试图调用删除,但我收到错误,这就是我在这里问这个问题的原因
  • 您可以通过确保最后没有在任何设备上下文或任何其他对象集合的成员中选择画笔来解决所有权问题。 那么,就delete吧。
  • @Thereisnothingwecando 我只能阅读实际提供的内容。你没有提到一个关于你用那个指针进一步做什么的字符。就像您的代码 sn-p 一样,您必须自己 delete 对象以避免内存泄漏。

标签: c++ mfc


【解决方案1】:

这个构造函数的签名是:

CD2DSolidColorBrush(
   CRenderTarget* pParentTarget,
   D2D1_COLOR_F color,
   CD2DBrushProperties* pBrushProperties = NULL,
   BOOL bAutoDestroy = TRUE
);

注意最后一个参数。来自 MSDN (CD2DSolidColorBrush::CD2DSolidColorBrush):

bAutoDestroy
表示对象将被所有者(pParentTarget)销毁。

【讨论】:

    【解决方案2】:

    这里是 Direct2D 对象的一个​​小示例:

    CChildView::CChildView() 
    : m_pBitmamLogo(NULL), 
      m_pBrushBackground(NULL)
    {
    }
    
    HRESULT CChildView::_LoadBackgroundBrush(CHwndRenderTarget* pRenderTarget)
    {
    ASSERT_VALID(pRenderTarget);
    
    // Create and load a Direct2D brush from a "PNG" resource
    // NOTE: D2D1_EXTEND_MODE_WRAP repeats the brush's content
    m_pBrushBackground = new CD2DBitmapBrush(pRenderTarget, // render target
        IDB_PNG_BACKGROUND,                                 // resource ID
        _T("PNG"),                                          // resource type
        CD2DSizeU(0, 0),
        &D2D1::BitmapBrushProperties(D2D1_EXTEND_MODE_WRAP, 
        D2D1_EXTEND_MODE_WRAP));
    
    return m_pBrushBackground->Create(pRenderTarget);
    }
    
    CChildView::~CChildView()
    {
    // No need to free Direct2D resources
    // because they are automatically destroyed by the parent render target 
    }
    

    来源: http://codexpert.ro/blog/2016/01/18/easy-png-resource-loading-with-mfc/

    【讨论】:

    • 您不必调用 Create,但感谢您提供的示例
    猜你喜欢
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 2015-10-17
    • 2013-01-10
    • 2018-03-11
    相关资源
    最近更新 更多