首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有初始大小的C++中的const数组初始化

没有初始大小的C++中的const数组初始化
EN

Stack Overflow用户
提问于 2014-06-11 14:46:14
回答 2查看 102关注 0票数 0

我在父类中有这样一个方法:

代码语言:javascript
复制
HWND SppTab::CreateToolTip(HWND hDlg)
{
    LRESULT  added, active;
    const int Controls[] = {
        /* Audio Tab (IDD_AUDIO ) */
        IDC_AUD_AUTO, IDC_AUD_8, IDC_AUD_16, IDC_CH_AUTO, IDC_LEFT, IDC_RIGHT, IDC_LEVEL_L, IDC_LEVEL_R, IDC_LEVEL_M,

        /* Transmitter Tab (IDD_DECODE) */
        IDC_DEC_AUTO, IDC_BTN_SCAN, IDC_LIST_PPM, IDC_LIST_PCM, 
        IDC_CH1, IDC_CH2, IDC_CH3, IDC_CH4, IDC_CH5, IDC_CH6, IDC_CH7, IDC_CH8, IDC_CH9, IDC_CH10, IDC_CH11, IDC_CH12, IDC_CH13, IDC_CH14, IDC_CH15, IDC_CH16
    };

       // Loop on all controls that require tooltip
       for (auto ctrl : Controls)
       {
           HWND hwndTool = GetDlgItem(hDlg, ctrl);
           toolInfo.uId = (UINT_PTR)hwndTool;
           added = SendMessage(m_hwndToolTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo);
           active = SendMessage(m_hwndToolTip, TTM_ACTIVATE, TRUE, (LPARAM)&toolInfo);
       };
   }

   return m_hwndToolTip;
}

导出的方法之间唯一的区别是数组Controls[]的内容。似乎数组应该是派生类的成员,并且将以不同的方式初始化。注意,数组大小不是固定的。

如何初始化作为类成员的数组?我知道我可以定义全局数组(对于每个类),并在构造函数中分配它们。这是最好的办法吗?

+++++++++++++++++++++++编辑++++++++++++++++++++++++++

那么,您总是可以定义一个全局数组const int g_RawBarId[] = {IDC_CH1,IDC_CH2,IDC_CH3,IDC_CH4,IDC_CH5,IDC_CH6,IDC_CH7,IDC_CH8,\ IDC_CH9,IDC_CH10,IDC_CH11,IDC_CH12,IDC_CH13,IDC_CH14,IDC_CH15,IDC_CH16};,然后将它分配给构造函数中的一个向量:m_vRawBarId(g_RawBarId, g_RawBarId+sizeof(g_RawBarId)/ sizeof(int)),但是,使用globals感觉就像是打破了OO游戏的规则。如果你有一个更好的主意-一个例子将是无价的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-11 15:06:21

由于数组似乎是常量数据,仅用于控制CreateToolTip()的功能,所以最谨慎的方法是将两个(或多个)数组定义为静态常量,并在CreateToolTip()中使用指向其中一个的指针。

这样,您就可以避免不必要的数据复制、不必要的数组初始化、不必要的内存分配以及处理可变数组大小的不必要的麻烦。

票数 2
EN

Stack Overflow用户

发布于 2014-06-11 14:58:07

在类构造函数中初始化这个成员数组可能是正确的。我想没有最好的办法。如果你做得好,最终都会得到同样的结果。

如果使用的是C++11,则可以在类定义本身中初始化成员。但是,如果使用动态内存,那么我将建议首先在构造函数中提供最小内存,然后根据需要增加内存。

此外,数组大小未知,因此可以使用动态成员数组分配。

它使用C中的malloccalloc以及C++中的new完成。

或者,您可以使用一些数据类型来管理动态内存分配本身,其示例是std::vector in C++。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24165963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档