She*_*eed 3 c++ swap unique-ptr c++11
我的代码是:
#include <memory>
#include <vector>
struct Core{
Core(int n){} };
int main() {
int base;
std::vector<std::unique_ptr<Core>> cores;
cores.push_back( std::move(std::unique_ptr<Core>(new Core(base))) );
cores[0].swap(std::unique_ptr<Core>(new Core(base)));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
|| === Build:Test in Release(编译器:GNU GCC编译器)=== |
在函数'int main()'错误:没有匹配函数调用'std :: unique_ptr <Core> :: swap(std :: unique_ptr <Core>)'
注意:候选人是:
注意:void std :: unique_ptr <_Tp,_Dp> :: swap(std :: unique_ptr <_Tp,_Dp>&)[with_Tp = Core; _Dp = std :: default_delete <Core>]
注意:参数1从'std :: unique_ptr <Core>'到'std :: unique_ptr <Core>&'没有已知的转换
你不能rvalue像这样交换一个临时对象(an ):
cores[0].swap(std::unique_ptr<Core>(new Core(base))); // error
Run Code Online (Sandbox Code Playgroud)
但是临时可以lvalue像这样交换命名对象()
std::unique_ptr<Core>(new Core(base)).swap(cores[0]); // but this works
Run Code Online (Sandbox Code Playgroud)
或者,您可以直接设置值:
cores[0] = std::unique_ptr<Core>(new Core(base));
Run Code Online (Sandbox Code Playgroud)
或者(更好)使用std :: make_unique
cores[0] = std::make_unique<Core>(base);
Run Code Online (Sandbox Code Playgroud)
您将对象的构造std::make_unique函数的参数直接传递给函数.
如果你必须使用new,总会有std :: unique_ptr :: reset函数:
cores[0].reset(new Core(base));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
550 次 |
| 最近记录: |