Tra*_*cer 2 c++ pointers vector c++builder c++11
我正在使用此代码:
#include <iostream>
#include <memory>
#include <vector>
using namespace std;
void out(int* p){
    cout << *p;
}
int main(){
    vector<unique_ptr<int> > vInt;
    for(int i = 0; i < 10; i++)
        vInt.push_back(unique_ptr<int>(new int(i)));
    out(vInt[0].get()); // 0
    return 0;
}
如果我使用一些在线编译器,它编译好,但C++ Builder XE2和XE6报告错误:
[bcc32 Error] vector(1179): E2247 'unique_ptr<int,default_delete<int> >::unique_ptr(const unique_ptr<int,default_delete<int> > &)' is not accessible
[bcc32 Error] vector(1203): E2247 'unique_ptr<int,default_delete<int> >::unique_ptr(const unique_ptr<int,default_delete<int> > &)' is not accessible
[bcc32 Error] xutility(1682): E2247 'operator unique_ptr<int,default_delete<int> >::=(const unique_ptr<int,default_delete<int> > &)' is not accessible
[bcc32 Error] xutility(1552): E2247 'operator unique_ptr<int,default_delete<int> >::=(const unique_ptr<int,default_delete<int> > &)' is not accessible
[bcc32 Error] xmemory(28): E2247 'unique_ptr<int,default_delete<int> >::unique_ptr(const unique_ptr<int,default_delete<int> > &)' is not accessible
我使用默认的编译器/ IDE设置我不知道为什么会这样?
有人使用C++ Builder XE3或更高版本可以确认此问题吗?
这是一个编译器错误/无法正确实现C++ 11标准.push_back有两个重载,一个是const左值引用,另一个是右值引用.你的代码非常好,因为在vInt.push_back(unique_ptr<int>(new int(i)));创建时unique_ptr是一个临时的,应绑定到右值引用然后移入存储.
我没有C++构建器,所以我不知道哪些变通办法可行.如果碰巧实现,emplace_back你可以使用它.否则,你可能会诉诸boost::container::vector或boost.ptr_container.