草庐IT

copy_ctor_assign

全部标签

c++ - std::string not nothrow move assignable or comparable?

我在研究type_traits时,发现了std::string的这个奇怪属性:$cata.cpp#include#includestatic_assert(std::is_nothrow_move_assignable::value,"???");static_assert(noexcept(std::declval()==std::declval()),"???");$g++-std=c++14a.cppa.cpp:4:1:error:staticassertionfailed:???static_assert(std::is_nothrow_move_assignable::val

c++ - 是否可以用 lambda 初始化变量(当复制 ctor 被删除时)?

我有以下代码:structA{//现场观看:http://coliru.stacked-crooked.com/a/a5c5912bd79053c3编译时出现如下错误:g++-std=c++17-O2-Wall-pedantic-pthreadmain.cpp&&./a.outmain.cpp:Inlambdafunction:main.cpp:12:12:error:useofdeletedfunction'A::A(constA&)'returnres;^~~main.cpp:4:3:note:declaredhereA(constA&)=delete;^我知道我可以将其包装在另一

c++ - 使用 std::copy 复制 std::list 并使用 std::list::erase 删除

在为示例列表分配数字后的波纹管示例代码中,我试图用std::copy复制容器,但问题是在运行时它说“无法取消引用结束列表迭代器”.我的问题是如何复制列表以便将复制的范围插入到列表的末尾?到最后因为我以后需要能够删除重复的范围,这就是我将新范围的开头保存到迭代器的原因。#include#include#includevoidprint(std::list&ref){for(auto&num:ref){std::coutmylist{1,2,3,4};std::list::iteratoriter=mylist.end();std::cout 最佳答案

c++ - boost::shared_ptr,ctor 中的一个原子递增,但 dtor 中的两个原子递减?

我正在单步执行boost::shared_ptr的源代码,并且在构造时引用计数器调用一次原子增量。但是,在销毁时我看到原子递减被调用了两次,连接到弱引用?但是,这怎么行呢?在构建时递增一次,在销毁时递减两次,一次在release()中,一次在weak_release()中? 最佳答案 shared_ptr必须维护两个引用计数。一个用于共享实例,一个用于可能通过weak_ptr引用。有了这个,weak_ptr能够增加shared_ptr中的弱引用计数并保持shared_ptr事件(即使在分配的对象被释放之后)以确定从weak_ptr到

c++ - lambda 函数不是 throw_move_assignable 吗?

clang-cl(4.0.0-trunk)似乎认为是,而vc2015(update3)认为不是。此实现是否已定义或标准是否规定了lambda函数应如何在术语或nothrow和moveassignable中实现?#include#includetemplatevoidtest_nothrow_move_assignable(T&&){std::cout::value 最佳答案 这是clang错误。来自[expr.prim.lambda]:Theclosuretypeassociatedwithalambda-expressionhas

C++ 11 : Mutex & Condition Variable Cannot be Copied

我是C++11的新手,正在使用线程。我遇到了一个无法复制互斥锁和条件变量对象的场景。代码是这样的....classproducer{public:producer(mutexm,condition_variablecv){mut=m;//ERRORcvar=cv;//ERROR}private:mutexmut;condition_variablecvar;}尝试在构造函数中复制变量时出现错误。似乎复制构造函数设置为deleteformutex和cv。有办法克服吗?我想要一个生产者和消费者类,然后从ma​​in函数传递互斥量和cv。所以基本上来自main函数的调用应该是这样的.....

c++ - 在 ctor/dtor 中启动/停止线程还是更好地使用 start()/stop()?

我有一个内部使用工作线程的类。当前,ctor启动线程,dtor停止(并等待)它。这被认为是好的代码吗?我认为为此目的使用单独的start()/stop()函数会更好。其中一个问题是停止和等待线程可能会抛出异常,这在dtor中是很糟糕的。你会给我什么建议:保持代码不变,只在dtor中捕获和记录异常使用start()/stop(),让客户端处理异常,只删除dtor中的线程(并在不干净关闭时发出警告或其他) 最佳答案 我可能不会在构造函数中启动线程,而是有一个启动函数。如果工作线程基本上对用户不可见,那么它可能没什么区别,从构造函数开始可

c++ - msvc is_copy_assignable 始终为真?

#includeclassTest{public:Test(constTest&)=delete;Test&operator=(constTest&)=delete;};voidfn(Test&a,constTest&b){a=b;}static_assert(!std::is_copy_assignable::value,"Testshouldn'tbeassignable");在MSVC2013Update3下编译此代码时static_assert意外失败,并且函数fn编译失败(如预期)。这很矛盾,对吧?我是否滥用了is_copy_assignable?有没有其他方法可以测试这种情

c++ - react 线程需要其引用共享状态的 std::shared_future 的 OWN COPY

我对EffectiveModernC++的第270页有疑问,作者是ScottMeyers。第5/6行,他写道:“唯一的微妙之处在于每个react线程都需要引用共享状态的std::shared_future的自己的拷贝,...”我的问题是:为什么我们必须将std::shared_future的拷贝传递给每个线程中的每个lambda函数?而先验的,我没有看到通过引用传递它有任何问题,这样就有一个独特的共享状态可以被不同的线程使用?我写了一段改编自DrScottMeyers的书的代码,即使我通过了sfparreference,它仍然有效。因此,是否可以通过引用传递它?#include#inc

c++ - copy-and-swap 习语在 self 分配期间如何工作?

我正在阅读优秀的copy-and-swapidiom问题和答案。但是我没有得到一件事:在self分配的情况下它是如何工作的?例子中提到的对象other不会释放分配给mArray的内存吗?那么,自分配的对象不会以拥有无效指针而告终吗? 最佳答案 ButonethingIamnotgettinghowdoesitworkincaseofselfassignment?让我们看一个简单的例子:classContainer{int*mArray;};//CopyandswapContainer&operator=(Containerconst