【发布时间】:2016-04-18 14:24:15
【问题描述】:
在现代 C++ 中,我们可以像这样初始化一个向量:
std::vector<int> v = { 1, 2, 3, 4, 5 };
但是如果我尝试创建一个指向向量的智能指针,这将无法编译:
auto v = std::make_shared<std::vector<int>>({ 1, 2, 3, 4, 5 });
有没有比创建后使用push_backs 更好的选择?
【问题讨论】:
-
为什么要将向量放在堆上?向量中的数据已经在堆中,因此“堆栈”中向量的大小非常小。
-
一个类中有一个私有类成员
vector,我通过getter 将它暴露给其他类。因此,我没有按值传递它,而是返回一个shared_ptr给它。 -
然后引用返回。
-
@NathanOliver 可能有数百万个理由共享向量的所有权,这是完全合法的问题,我不明白为什么有人 -1 它
-
对 gcc 来说最糟糕的是它会为列表中的 2 个元素编译,但会调用另一个构造函数。非常危险,对我来说似乎是语言缺陷。