Ell*_*ods 4 c++ rvalue-reference c++11
是否有可能将'移动' rvalue成为一个shared_ptr.到目前为止,我尝试过的所有方法都会产生副本.
我想要的使用模式是:
class Element {
public:
Element(const string &);
Element(const Element &) = delete; //delete copy constructor
// ...
};
class MyCollectionOfElements {
public:
void add(Element &&); // add by rvalue
// ...
protected:
vector<shared_ptr<Element>> elements;
};
MyCollectionOfElements elements;
elements.add(Element("something"));
Run Code Online (Sandbox Code Playgroud)
我有理由想要这种模式,并且理解存在自然有效的替代模式(例如将新Element的指针作为指针而不是指针传递rvalue).
我当前的怀疑是传入rvalue是在堆栈上,而我需要在堆上将它存储在一个堆栈中shared_ptr,因此副本是不可避免的.
Ker*_* SB 10
是:
void add(Element && e)
{
elements.push_back(std::make_shared<Element>(std::move(e)));
}
Run Code Online (Sandbox Code Playgroud)
您还必须确保您的类实际上有一个移动构造函数:
class Element
{
public:
Element(Element &&) = default;
// ...
};
Run Code Online (Sandbox Code Playgroud)
通过声明复制构造函数,可以禁止移动构造函数的隐式声明,因此需要显式声明它.
| 归档时间: |
|
| 查看次数: |
2631 次 |
| 最近记录: |