C ++中纹理数据指针的联合

问题描述 投票:1回答:1

我从不同的来源捕获纹理数据,这些数据位于BYTE *或ID3D11Texture2D COM指针中,因此我试图制作一个STL容器,其中将包含以下联合类型的集合。

    _COM_SMARTPTR_TYPEDEF(ID3D11Texture2D, __uuidof(ID3D11Texture2D));

    union TextureData
    {
        ID3D11Texture2DPtr m_tex2D;
        BYTE* m_byte;
    };

但是当我仅编译以上声明而不使用STL容器的联合类型时,会看到以下警告:

警告C4624:'.... :: TextureData':析构函数被隐式定义为已删除

任何人都可以让我知道宣布这个工会应该关注什么?

编辑:

我打算这样使用,但是在以下列方式使用它之前会显示编译警告:

std::array< std::tuple<< DXGI_FORMAT, TextureData>>, 4>;

EDIT2:

我发现如果我像下面这样使用警告,则不会显示:

    union TextureData
    {
        ID3D11Texture2D* m_tex2D;
        BYTE* m_byte;
    };
c++ pointers directx-11 unions
1个回答
0
投票
union documentation

如果联合包含具有非平凡特殊成员函数(复制/移动构造函数,复制/移动分配或析构函数)的非静态数据成员,则

该函数默认为删除,并且需要由程序员明确定义。

_COM_SMARTPTR_TYPEDEF documentation

智能指针通常由_COM_SMARTPTR_TYPEDEF宏提供的typedef定义引用。该宏采用接口名称和IID,并声明

_ com_ptr_t的特殊化

,带有接口名称加上Ptr的后缀。显然,_com_ptr_t具有非平凡的析构函数,因此您需要向联合中添加一个显式的析构函数。
© www.soinside.com 2019 - 2024. All rights reserved.