And*_*dry 10 c++ boost object movable noncopyable
就一个问题.看看C++ Boost库(特别是boost :: thread类)我最后想到:"如何创建一个定义无法复制但可以从函数返回的对象的类?"
那么考虑这个例子,boost :: thread类具有我之前提到的特性,所以可以这样做:
boost::thread make_thread();
void f()
{
boost::thread some_thread=make_thread();
some_thread.join();
}
Run Code Online (Sandbox Code Playgroud)
那么这意味着对象boost :: thread无法复制,但是从函数返回,这是可能的.这怎么可能????
我想一定不能提供拷贝构造函数,但是如何处理函数返回?它不需要使用复制构造函数???
谢谢
这在C++ 1x中是可能的,它通过右值引用提供移动语义.使用此功能,您可以分别实现移动和/或复制:
class my_class {
private:
data_t* data_;
public:
my_class(const my_class& rhs) // copy constructor
: data_(rhs.data_.clone())
{}
my_class(my_class&& rhs) // move constructor
: data_(rhs.data_)
{
rhs.data_ = NULL;
}
~my_class() {delete data_;} // noop if data_==NULL
my_class& operator=(my_class rhs) // copy assignment
{
this->swap(rhs);
}
my_class& operator=(my_class&& rhs)// move assignment
{
this->swap(rhs);
}
// ...
};
Run Code Online (Sandbox Code Playgroud)
可以单独禁止复制和移动,因此您可以设置可以移动但不能复制的类.
当然,即使你的编译器还不支持移动语义(std::auto_ptr在所有移动而不是在分配时复制),有一些神奇的技巧可以让你这样做,所以这可能适用于boost::thread即使在没有移动语义的情况下也是如此.
| 归档时间: |
|
| 查看次数: |
5454 次 |
| 最近记录: |