当前位置: 首页 > 知识库问答 >
问题:

我不能将'fill'std::vector构造函数与唯一的\u ptr一起使用

晁砚
2023-03-14

我试图使用std::vector构造函数的“fill”版本。它将元素的数量作为第一个参数,并使用const value_type

#include <vector>

int main()
{
    std::vector<int> v(100, 7);
    // Works, creates vector with 100 elements of int 7.

}

然而,我似乎无法使这个工作与unique_ptrs:

#include <vector>
#include <memory>

int main()
{
    std::vector<std::unique_ptr<int>> v1(100, std::unique_ptr<int>());
    std::vector<std::unique_ptr<int>> v2(100, std::make_unique<int>());

}

两者都不适用于unique_ptrs。我从Visual Studio 2017得到的错误是:

错误C2280'std::unique_ptr

考虑到第二个参数使用const引用向量中包含的类型,我希望std::unique_ptr()或std::make_unique()可以简单地用作第二个参数。我知道它们都是临时变量,但鉴于参数是常量引用,它应该接受它,为什么它接受它,在我的第一个例子中,它接受整数7。

另外,std::unique_ptr()看起来与“最烦人的解析”非常接近,不过这里的例子可以参考。com使用它:

// Use the default constructor.
    std::unique_ptr<Vec3> v1 = std::make_unique<Vec3>();

正如我所说,这看起来有点像“最麻烦的解析”,是一个函数签名,用于不带参数的函数,并返回std::unique_ptr

共有1个答案

雍马鲁
2023-03-14

您试图使用的std::向量构造函数必须复制所提供的输入值,以便将向量填充到请求的大小。无法复制std::unique_ptr是其最重要的特性之一,因此您不应该对代码不起作用感到惊讶。

如果删除第二个参数,向量中的每个值都将使用std::unique_ptr的默认构造函数构造;因此没有复制。不管怎样,这就是你想要做的。

另请参见:如何使用空指针初始化唯一_ptr向量?

 类似资料:
  • 我分配给类的属性是: 我需要设置ISSOLD,并敦促其设置为false。这就是我创建默认构造函数的原因。但是我使用Builder()来设置类字段,并且在某个地方使用getter/setter来设置属性。 我的要求是将isPurpressed/IsSoldOut设置为True/False,但不能为NULL。 请指导我如何才能做到这一点。

  • 我有一个使用构造函数表达式的查询。在大多数情况下,它是工作的,但是我想减少数据库上的查询数量。所以我尝试了FETCH和@EntityGgraph,但是我得到了 org.springframework.dao.InvalidDataAccessResourceUsageException:查询指定的联接提取,但提取关联的所有者不在选择列表中[FromElement{explicit,不是集合联接,提

  • 本文向大家介绍我们如何在Java中将枚举类型与构造函数一起使用?,包括了我们如何在Java中将枚举类型与构造函数一起使用?的使用技巧和注意事项,需要的朋友参考一下 枚举类型可以具有一个私有的构造函数,该构造函数可用于初始化实例字段。  EnumDemo类演示了这一点。它具有带有四个常量的Food枚举类型:HAMBURGER,FRIES,HOTDOG和ARTICHOKE。请注意,括号后的每个常数值之

  • 我试图弄清楚如何在CDI中使用构造函数注入,其中一个参数是JNDI查找。 用正常的打野,我可以做到以下几点: 如何指定参数是通过JNDI查找检索的bean?在哪里指定JNDI名称?

  • 想改进这个问题吗?更新问题,以便可以通过编辑这篇文章来回答事实和引文。 我确实使用Spring和Lombok 没有原型bean,我们必须传递目标类所需的依赖项 我们如何将bean标记为原型并正确处理依赖bean和构造函数参数? 选项1 -没有原型beans 选项 2 - 原型豆

  • 假设我有对象:bob1,cob2。我想为类B和C建立一个析构函数,但我不确定如何销毁B.BB和C.CC以及如何访问它们。还有,有没有办法让我做到这一点,而不让类成为a类的朋友?