shared_ptr或unique_ptr到CustomDialogEx

时间:2014-12-02 07:18:24

标签: c++ visual-c++ c++11 smart-pointers

地狱全部,

我正在动态创建制表符控件。为此,我正在做

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

如何使用智能指针实现?

感谢。

2 个答案:

答案 0 :(得分:2)

std::unique_ptr<Type> name[Count];

所以你必须将你的行改为:

std::unique_ptr<CustomDialogEx> tabPages[TOTAL_MODULES];

如果始终有一个明显的对象所有者,请使用unique_ptr shared_ptr如果该对象由一组使用它的所有者持有。

如果您想了解有关背景的更多信息,请阅读本文可能有所帮助:

http://www.umich.edu/~eecs381/handouts/C++11_smart_ptrs.pdf

答案 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