相关疑难解决方法(0)

移动std :: mutex的构造函数

c ++标准库中的许多类现在都有移动构造函数,例如 -

thread::thread(thread&& t)
Run Code Online (Sandbox Code Playgroud)

但似乎std :: mutex没有.我知道它们不能被复制,但是能够从"make_mutex"函数中返回一个似乎是有意义的.(不是说它有用,只是它有意义)

有什么理由说std :: mutex没有移动构造函数吗?

c++ c++11

37
推荐指数
2
解决办法
1万
查看次数

为什么所有迭代器/迭代器适配器都不能在C++ 11中移动?

这个问题中讨论了什么时候在C++ 11中创建一个不可移动的类型,我发现Scott Meyers在comp.std.c ++上有类似的问题,其中列出的类类型下面的SG在C++ 11中不可移动.

  • 所有互斥类型(recursive_mutex,timed_mutex,recursive_timed_mutex,
  • condition_variable
  • TYPE_INFO
  • error_category
  • 区域::小
  • random_device
  • seed_seq
  • 的reference_wrapper
  • 持续时间
  • 时间点
  • - 所有迭代器/迭代器适配器
  • 的ios_base
  • basic_istream ::哨兵
  • basic_ostream ::哨兵
  • 所有原子类型
  • once_flag

问题是为什么all iterators / iterator adaptors不能移动?

c++ iterator move-semantics c++11

17
推荐指数
2
解决办法
788
查看次数

是否有可复制但不可移动的类的用例?

在阅读了@Mehrdad 最近的问题之后,哪些类应该是不可移动的,因此是不可复制的,我开始想知道是否存在可以复制但不能移动的类的用例.从技术上讲,这是可能的:

struct S
{
    S() { }
    S(S const& s) { }
    S(S&&) = delete;
};

S foo()
{
    S s1;
    S s2(s1); // OK (copyable)
    return s1; // ERROR! (non-movable)
}
Run Code Online (Sandbox Code Playgroud)

虽然S有一个复制构造函数,但它显然不会对CopyConstructible概念进行建模,因为这反过来又是MoveConstructible概念的改进,需要存在(未删除的)移动构造函数(参见§17.6.3.1/2,表21) .

是否有类似S上述类型的用例,可复制但不可 CopyConstructible 移动?如果没有,为什么不禁止在同一个类中声明复制构造函数已删除的移动构造函数?

c++ copy-constructor move-semantics deleted-functions c++11

14
推荐指数
2
解决办法
1234
查看次数

Why does std::copyable subsume std::movable?

According to cppreference, std::copyable is defined as follows:

template <class T>
concept copyable =
  std::copy_constructible<T> &&
  std::movable<T> && // <-- !!
  std::assignable_from<T&, T&> &&
  std::assignable_from<T&, const T&> &&
  std::assignable_from<T&, const T>;
Run Code Online (Sandbox Code Playgroud)

I'm wondering why a copyable object should be also movable. Just think about a global variable that is accessed by several functions. While it makes sense to copy that variable (for example to save its state before calling another function) it makes no sense, and actually would be …

c++ copy move-semantics c++20

8
推荐指数
1
解决办法
130
查看次数

参考成员是否良好做法?是const会员吗?

一位同事和我正在讨论const或参考成员是否是正确的事情.const和引用成员使类不可复制且不可移动,除非您编写自己的副本并移动忽略引用或const成员的运算符.我找不到一个忽略复制或移动某些成员只是因为它们是引用或const有意义的情况.

我认为拥有一个不可移动的对象很少在逻辑上是合理的,并且是一个选择,它只与该类是否是位置不变有关.不可复制的对象更常见,但是使类不可复制的选择与它是否拥有逻辑上不可复制的资源,如果它代表唯一的所有权等有关.我想不出一个理由的唯一特征是拥有引用或const成员是否意味着该类具有这些特征中的任何一种(不可复制或不可复制)

他们应该曾经被使用?应该是一个而不是另一个吗?有什么例子?

c++ const reference const-correctness

4
推荐指数
1
解决办法
315
查看次数

在新的c ++ 11项目中,我应该默认删除任何操作吗?

我正在C++ 11中开始一个新项目,并且发现了delete关键字,它可以防止意外调用复制构造函数等等.我是否可以在全局范围内执行"推荐"的删除操作以提高类型安全性,例如防止在表达式中签名为无符号转换?我应该默认在deletedelete的所有班级中完成所有5项操作吗?

仅供参考,这个程序需要高性能(这就是我多年来第一次使用C++的原因)并且很少有我想要复制的东西,所以副本通常是一个bug,尽管不是100%的时间所以我对这个具体案例感兴趣,以及其他程序的一般情况.我可能会delete复制构造函数并添加一个单独的方法来复制对象,这是我需要复制的罕见时间.这是个好主意吗?

c++ c++11 delete-keyword

4
推荐指数
2
解决办法
237
查看次数

为什么condition_variable不是MoveAssignable

为什么condition_variable不是MoveConstructible(根据http://en.cppreference.com/w/cpp/thread/condition_variable)?这禁止包含在许多std::unordered_map移动物体的容器(例如)中.

这迫使人们使用unique_ptr一个额外的堆分配,这make_shared是为了解决而构建的.此外,如果没有池分配器,这可能会变得非常低效.

c++ move condition-variable c++11

3
推荐指数
1
解决办法
601
查看次数

应该是不可复制和不可移动的类的一些示例是什么?

大多数不可复制的对象都是不可复制的,因为它具有多个(例如,std::unique_ptr)是无意义的或有问题的,但移动它们仍然很好.但有哪些例子有充分的理由使对象既不可复制也不可移动?

c++ c++11

2
推荐指数
1
解决办法
191
查看次数