shared_ptr或unique_ptr到自定义对话框



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

相关内容

  • 没有找到相关文章

最新更新