相关疑难解决方法(0)

我可以列出 - 初始化只移动类型的向量吗?

如果我通过我的GCC 4.7快照传递以下代码,它会尝试将unique_ptrs 复制到向量中.

#include <vector>
#include <memory>

int main() {
    using move_only = std::unique_ptr<int>;
    std::vector<move_only> v { move_only(), move_only(), move_only() };
}
Run Code Online (Sandbox Code Playgroud)

显然,因为std::unique_ptr不可复制而无法工作:

错误:使用已删除的函数'std :: unique_ptr <_Tp,_Dp> :: unique_ptr(const std :: unique_ptr <_Tp,_Dp>&)[with _Tp = int; _Dp = std :: default_delete; std :: unique_ptr <_Tp,_Dp> = std :: unique_ptr]'

GCC是否正确尝试从初始化列表中复制指针?

c++ initializer-list move-semantics c++11

89
推荐指数
4
解决办法
1万
查看次数

如何使用初始化列表初始化noncopyable容器?

可能重复:
我可以列出 - 初始化只移动类型的向量吗?

我用gcc 4.6.1编译这段代码

int main()
{
    std::vector<std::unique_ptr<int>> vec({
            std::unique_ptr<int>(new int(0)),
            std::unique_ptr<int>(new int(1)),
        });
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在什么g ++抱怨有类似的东西

/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/../../../../include/c++/4.6.1/bits/stl_construct.h:76:7: **error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&)** [with _Tp = int, _Dp = std::default_delete<int>, std::unique_ptr<_Tp, _Dp> = std::unique_ptr<int>]'
Run Code Online (Sandbox Code Playgroud)

在这种情况下,似乎g ++仍尝试复制构造函数,尽管我在初始化列表中添加的是r值.那么如何用初始化列表初始化一个noncopyable容器呢?

c++ containers noncopyable initializer-list c++11

12
推荐指数
1
解决办法
1921
查看次数

用于非可复制类型的整数可索引RAII容器

是否有一个标准容器具有相同的通用API,vector<T>但是通过直接默认构造填充新位置?


背景:

我有一个类型,不允许复制,但有一个默认的构造函数,我真正想做的是这样的:

vector<NoCopy> bag(some_size);

// use bag[i]'s

return; // bag & contents get correctly cleaned up. 
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为它vector<T>(int)是根据默认构造对象然后将其复制到每个新位置来实现的.


编辑:不是C++ 0xB(又名C++ 11)

c++ containers stl

4
推荐指数
1
解决办法
279
查看次数