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;
}
Run Code Online (Sandbox Code Playgroud)
如果我使用一些在线编译器,它编译好,但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
Run Code Online (Sandbox Code Playgroud)
我使用默认的编译器/ 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
.
归档时间: |
|
查看次数: |
1865 次 |
最近记录: |