地狱全部,
我正在动态创建制表符控件。为此,我正在做
CustomDialogEx *tabPages[TOTAL_MODULES];
在构造函数中我正在做
CModuleTabCtrl::CModuleTabCtrl()
{
tabPages[0] = new CPodule;
tabPages[1] = new CSBModule;
tabPages[2] = new CPTModule;
tabPages[3] = new CQSModule;
}
并且在init()方法中,我正在做
void CModuleTabCtrl::Init()
{
// Add Dialog pages to tabPages array.
tabPages[0]->Create(IDD_DLG_P, this);
tabPages[1]->Create(IDD_DLG_SB, this);
tabPages[2]->Create(IDD_DLG_PT, this);
tabPages[3]->Create(IDD_DLG_QS, this);
}
当我尝试使用像这样的智能指针时
std::unique_ptr<CustomDialogEx[TOTAL_MODULES]>tabPages;
它在我调用基类成员函数的地方给出了错误。 例如:
tabPages[0]->Create(IDD_DLG_P, this);
它出现以下错误......
left of '->Create' must point to class/struct/union/generic type
如何使用智能指针实现?
感谢。
答案 0 :(得分:2)
std::unique_ptr<Type> name[Count];
所以你必须将你的行改为:
std::unique_ptr<CustomDialogEx> tabPages[TOTAL_MODULES];
如果始终有一个明显的对象所有者,请使用unique_ptr shared_ptr如果该对象由一组使用它的所有者持有。
如果您想了解有关背景的更多信息,请阅读本文可能有所帮助:
答案 1 :(得分:1)
您正在创建指向基类对象数组的指针,这不是您想要的。你需要一个指针数组,如第一个例子所示:
std::unique_ptr<CustomDialogEx> tabPages[TOTAL_MODULES];
tabPages[0].reset(new CPodule); // Create the first object
tabPages[0]->Create(IDD_DLG_P, this); // Do the weird second-stage initialisation