为什么复制构造函数在这里使用?

时间:2017-03-30 08:28:54

标签: c++ constructor

我有以下代码段:

template <class Callback>
void CreateRouteIteratorAndStore(ChordID searchValue,
                                 const Fingertable &initialTable,
                                 Client &client,
                                 Callback &&callback) {
    RouteIteratorSpecialization<RouteIteratorType::Online_StoreLookup>
        implementation{client, initialTable};
    new RouteIterator<Callback, decltype(implementation)>(
        std::move(implementation), std::move(searchValue), initialTable, client,
        std::forward<Callback>(callback));
}

RouteIterator的构造函数如下所示:

template <class Callback, class Impl>
RouteIterator<Callback, Impl>::RouteIterator(Impl impl,
                                             ChordID searchValue,
                                             const Fingertable &initialTable,
                                             Client &client,
                                             Callback &&callback)
    : impl_(std::move(impl)), ... {}

我收到错误:

  

调用隐式删除的复制构造函数   &#39;尼散:: RouteIteratorSpecialization&#39;

在RouteIterator构造函数的调用站点。 RouteIteratorSpecialization有一个移动构造函数,但没有复制构造函数。这是预期的但是我不知道的是为什么复制而不是移动构造函数被调用。

请不要关心新的。这个对象的生命时间是一个混乱,我需要在某个时候修复。

编辑: RouteIteratorSpecialization<RouteIteratorType::Online_StoreLookup>的移动构造函数 noexcept。但这不应该在这里有所作为。我只是说它,因为在尝试存储仅移动标准容器中的对象时,这是一个常见的错误。

0 个答案:

没有答案