【问题标题】:Unable to set unique_ptr<Basic> to p(new Basic())无法将 unique_ptr<Basic> 设置为 p(new Basic())
【发布时间】:2016-02-25 16:40:47
【问题描述】:

我有一个非常通用的Basic 类。 (如下所示)我正在尝试将指针存储在unique_ptr&lt;Basic&gt; 中以存储在向量中,vector&lt;unique_ptr&lt;Basic&gt;&gt;

class Basic:
public BaseClass
{
public:
    Basic();
    ~Basic();
};

还有另一个 [host] 类包含此向量,并容纳此成员:

void BasicManagement::CreateBasicEntry(){
    unique_ptr<Basic> e_Basic = p( new Basic() );
    LocalBasicQueue.push_back(e_Basic);
}

其中LocalBasicQueuevector&lt;unique_ptr&lt;Basic&gt;&gt;。也许我的初始化是错误的,但我遇到了智能感知错误,而且我似乎无法将指针分配给一个新的类实例以存储在向量中。

(“p”的编译器错误)11 IntelliSense: call of an object of a class type without appropriate operator() or conversion functions to pointer-to-function type c:\Us...agement.cpp 15 32 TestManagement

【问题讨论】:

  • 错字:Base vs Basic ?
  • 很抱歉 - 刚刚修复它。 :P

标签: c++ pointers vector unique-ptr


【解决方案1】:

unique_ptr 的构造函数是显式的。你应该像这样构造e_Base

unique_ptr<Basic> e_base{new Basic};

另外,请注意,您不能只使用 push_backunique_ptr,因为它不可复制。你需要std::move()它。

【讨论】:

  • 谢谢!这个选项有效!新语法是LocalBasicQueue.push_back(std::move(e_base);吗?
  • 另外,一定要喜欢经验丰富的编码人员跳过所有错字,浏览上下文的事实。 xD 我希望我的编译器能做到这一点。
【解决方案2】:

不要写new Basic(),改用new Basic

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    相关资源
    最近更新 更多