Hell All,
我正在动态创建选项卡控件。为此,我正在做
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
如何使用智能指针实现?
谢谢。
std::unique_ptr<Type> name[Count];
因此,您必须将行更改为:
std::unique_ptr<CustomDialogEx> tabPages[TOTAL_MODULES];
如果对象始终有一个明显的所有者,并且使用unique_ptrshared_ptr对象是否由使用它的一组所有者持有。
如果您想了解更多关于背景的信息,阅读本文可能会有所帮助:
http://www.umich.edu/~eecs381/handouts/C++11_smart_ptrs.pdf
您正在创建一个指向基类对象数组的指针,这不是您想要的。您需要一个指针数组,如第一个示例所示:
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