将 std::make_unique 与 class 的成员变量一起使用时出现问题

Trouble using std::make_unique with member variable of class

之前没用过std::make_unique,code inspection鼓励我用

如果我使用它,它不会显示错误:

auto x = make_unique<CChristianLifeMinistryHtmlView>();

但是当我用我的 class 成员变量 CChristianLifeMinistryHtmlView *m_pHtmlPreview 尝试它时,它不喜欢它:

m_pHtmlPreview = std::make_unique<CChristianLifeMinistryHtmlView>();

如何将 std::make_unique 与 class 的成员变量一起使用?

您的问题与 class 成员无关,而与它的类型有关!

std::make_unique() returns std::unique_ptr 用于模板类型 T(即 std::unique_ptr 类型 T 的实例)

template< class T, class... Args >
unique_ptr<T> make_unique( Args&&... args );
^^^^^^^^^^^^^^

会员

CChristianLifeMinistryHtmlView *m_pHtmlPreview;

是指向 CChristianLifeMinistryHtmlView 的指针,而不是 std::unique_ptr。因此,类型不匹配。


How do I use make_unique with a member variable of the class?

因此,您需要使用std::unique_ptr<CChristianLifeMinistryHtmlView>作为m_pHtmlPreview成员的类型:

std::unique_ptr<CChristianLifeMinistryHtmlView> m_pHtmlPreview; 
...
m_pHtmlPreview = std::make_unique<CChristianLifeMinistryHtmlView>();

如果是长输入,类型别名是个不错的主意:

using UniqueCLMHView = std::unique_ptr<CChristianLifeMinistryHtmlView>;
UniqueCLMHView m_pHtmlPreview; 
...
m_pHtmlPreview = std::make_unique<CChristianLifeMinistryHtmlView>();