首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调动-指派和参考成员

调动-指派和参考成员
EN

Stack Overflow用户
提问于 2013-12-10 01:27:20
回答 2查看 9.2K关注 0票数 26

对于具有引用成员变量的类的复制分配是“否”,因为您不能重新分配引用。但搬家任务呢?我尝试简单地对其进行move,但是,当然,当我只想移动引用本身时,这会破坏源对象:

代码语言:javascript
运行
复制
class C
{
public:
    C(X& x) : x_(x) {}
    C(C&& other) : x_(std::move(other.x_)) {}
    C& operator=(C&& other)
    {
        x_ = std::move(other.x_);
    }
private:
    X& x_;
};

X y;
C c1(y);

X z;
C c2(z);

c2 = c1; // destroys y as well as z

我不应该只执行搬迁任务和坚持搬迁建设吗?这使得swap(C&, C&)很难实现。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-10 17:36:33

(按“任择议定书”的建议作为评论的答复发布)

一般来说,如果一个人想用C++中的引用做一些不平凡的事情,我们就会使用reference_wrapper<T>,它本质上是T&的一个奇特的值--语义代入--那么我们就会用它来完成它--它已经提供了(重新)分配和其他操作。我确信这会使移动构造函数和赋值变得非常琐碎,如果不是琐碎的话(注意,不是trivial,因为按照is_trivially_*语义)。

“引用包装器”作为TR1的一部分添加到TR1中,并且是C++11的一部分。

文档:wrapper

票数 29
EN

Stack Overflow用户

发布于 2013-12-10 02:14:34

从某种意义上说,引用是一个T *const,在句法上加糖到自动释放、自动捕获和自动生存期延长时间。(请注意,这并不完全正确,但往往是在实践中和实际中)

如果您想要一个可重置的引用,C++有这样的内容:它们被称为指针。如果愿意,可以使用访问器用函数调用替换取消引用。其他难以模仿的特性(临时生存期扩展)不适用于struct成员。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20484344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档