允许左值引用和不允许右值引用作为函数参数?

猎犬狗

因此,我有一个管理资源的类。与相似std::mutex,它具有acquirerelease方法。为了成为一名优秀的RAII风格的程序员,我想对实现类似std::unique_lock,以防止永远获取资源。但是,出于语义原因,acquire并且releaseconst函数(请相信我)。

因此,这意味着我的RAII类的构造函数具有的签名RAIIType( const T &)问题是右值也将绑定到该值。我希望让SO的大脑能够阻止这种情况的发生。

用编码术语:

class ResourceType
{
public:
   void acquire() const{}
   void release() const{}
};

template< class T >
class RAIIClass
{
public:
   RAIIClass(const T & in_t) : t(in_t) { t.acquire(); }
   ~RAIIClass() { t.release(); }
private:
   const T & t;
};

ResourceType foo() { return ResourceType(); }

int main()
{
   ResourceType x1;
   const ResourceType & x2(x1);

   {
      RAIIClass<ResourceType> x(x1); //Allowable
   }
   {
      RAIIClass<ResourceType> x(x2); //Allowable
   }
   {
      RAIIClass<ResourceType> x(foo()); //Currently allowable, would like to disallow.
   }
}

有任何想法吗?

霍华德·辛南特

添加此构造函数:

RAIIClass(const T&&) = delete;

这将绑定到const或非const右值,因为const和非const左值都将首选您现有的构造函数:

RAIIClass(const T & in_t) : t(in_t) { t.acquire(); }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

右值引用和左值引用作为参数之间的差异

来自分类Dev

为什么C ++不允许将函数参数用作默认值?

来自分类Dev

为什么不允许将右值引用绑定到非const引用,但是却可以在一个对象上调用非const成员函数

来自分类Dev

从 SQL (Server) 中的 xml 列中获取或选择值 - 不允许远程函数引用

来自分类Dev

使用右值引用作为默认参数

来自分类Dev

为什么右值引用作为左值引用传递?

来自分类Dev

为什么标准允许左值引用元组分配右值引用元组?

来自分类Dev

接受对类模板参数的左值和右值引用

来自分类Dev

右值引用作为对象字段

来自分类Dev

JLabel构造函数不允许将null作为参数

来自分类Dev

“未定义的值,不允许引用”的解决方法

来自分类Dev

返回作为参数传递给函数的右值引用

来自分类Dev

序言中不允许引用

来自分类Dev

Hashmap不允许将整数作为值

来自分类Dev

接受左值、右值和右值引用的 C++ 函数签名

来自分类Dev

将参数传递给函数;子查询返回的值超过1。这是不允许的

来自分类Dev

传递输入参数作为右值引用?

来自分类Dev

不允许使用`?`检查null和set值。

来自分类Dev

不允许使用`?`检查null和set值。

来自分类Dev

数据成员作为左值引用或右值副本

来自分类Dev

C ++,函数参数中的右值引用

来自分类Dev

使用左值引用作为非类型模板参数

来自分类Dev

使用左值引用作为非类型模板参数

来自分类Dev

可折叠为Tree类型,“此处未定义实例的值,因此不允许该引用”

来自分类Dev

为什么GCC允许通过右值引用捕获?

来自分类Dev

不允许选择下拉空值

来自分类Dev

xmlns不允许xslt更新值

来自分类Dev

不允许更新特定索引的值

来自分类Dev

Jpinner setModel不允许更改值

Related 相关文章

  1. 1

    右值引用和左值引用作为参数之间的差异

  2. 2

    为什么C ++不允许将函数参数用作默认值?

  3. 3

    为什么不允许将右值引用绑定到非const引用,但是却可以在一个对象上调用非const成员函数

  4. 4

    从 SQL (Server) 中的 xml 列中获取或选择值 - 不允许远程函数引用

  5. 5

    使用右值引用作为默认参数

  6. 6

    为什么右值引用作为左值引用传递?

  7. 7

    为什么标准允许左值引用元组分配右值引用元组?

  8. 8

    接受对类模板参数的左值和右值引用

  9. 9

    右值引用作为对象字段

  10. 10

    JLabel构造函数不允许将null作为参数

  11. 11

    “未定义的值,不允许引用”的解决方法

  12. 12

    返回作为参数传递给函数的右值引用

  13. 13

    序言中不允许引用

  14. 14

    Hashmap不允许将整数作为值

  15. 15

    接受左值、右值和右值引用的 C++ 函数签名

  16. 16

    将参数传递给函数;子查询返回的值超过1。这是不允许的

  17. 17

    传递输入参数作为右值引用?

  18. 18

    不允许使用`?`检查null和set值。

  19. 19

    不允许使用`?`检查null和set值。

  20. 20

    数据成员作为左值引用或右值副本

  21. 21

    C ++,函数参数中的右值引用

  22. 22

    使用左值引用作为非类型模板参数

  23. 23

    使用左值引用作为非类型模板参数

  24. 24

    可折叠为Tree类型,“此处未定义实例的值,因此不允许该引用”

  25. 25

    为什么GCC允许通过右值引用捕获?

  26. 26

    不允许选择下拉空值

  27. 27

    xmlns不允许xslt更新值

  28. 28

    不允许更新特定索引的值

  29. 29

    Jpinner setModel不允许更改值

热门标签

归档