C++11 如何对std::list变量使用std::unique\u ptr
我有一个消费者生产者的情况,我不断地将数据推到列表中,如果列表中还没有数据,那么每隔几秒钟我就会打包数据并将其发送到服务器 目前,我有一个线程,它会延迟几秒钟,唤醒,设置一个标志,这样就不会向列表中添加任何内容,进行打包,删除列表中已处理的项目,然后允许程序再次开始向列表中添加 这对于原型来说很好,但现在我需要让它在更现实的情况下工作得更好 因此,我想让生产者获得信息,当大小足够大或经过足够长的时间时,将列表传递给线程进行处理 我想将引用传递给列表,而unique_ptr将是有益的,因此一旦它被移动,producer线程就可以创建一个新的列表,并且出于所有实际目的,可以像以前一样使用相同的列表 但是当我试图从C++11 如何对std::list变量使用std::unique\u ptr,c++11,unique-ptr,C++11,Unique Ptr,我有一个消费者生产者的情况,我不断地将数据推到列表中,如果列表中还没有数据,那么每隔几秒钟我就会打包数据并将其发送到服务器 目前,我有一个线程,它会延迟几秒钟,唤醒,设置一个标志,这样就不会向列表中添加任何内容,进行打包,删除列表中已处理的项目,然后允许程序再次开始向列表中添加 这对于原型来说很好,但现在我需要让它在更现实的情况下工作得更好 因此,我想让生产者获得信息,当大小足够大或经过足够长的时间时,将列表传递给线程进行处理 我想将引用传递给列表,而unique_ptr将是有益的,因此一旦它被
typedef list<string> STRINGQUEUE;
STRINGQUEUE newMachineQueue;
typedef列表字符串队列;
STRINGQUEUE-newMachineQueue;
到
std::unique_ptr newMachineQueue;
然后我得到的错误是,insert
不是std::unique\u ptr
的成员
我认为我不想使用newMachineQueue.get()
然后执行我的操作,因为我认为我失去了unique\u ptr
的好处
那么,如何在列表上使用unique_ptr并能够调用列表中的方法呢?就像使用指针一样使用它
newMachineQueue->insert(...);
你可能会感兴趣
您也不需要使用唯一的\u ptr
,但您只需移动列表并为其重新分配一个新列表即可
void consumer(std::list<string> list) {
// accept by value!
}
std::list<string> machineQueue;
// hand-off to consumer
consumer(std::move(machineQueue));
machineQueue = std::list<string>{}; // new list
无效消费者(标准::列表){
//按价值接受!
}
std::列表机器;
//交给消费者
消费者(标准:移动(机器));
machineQueue=std::list{};//新名单
Oops,谢谢。我使用了newMachineQueue.insert,因为我忘了它当前不是指针。@JamesBlack我还添加了一些代码,这些代码在没有唯一\u ptr
的情况下实现了您想要的功能。您的编辑解决了我准备询问的另一个问题,因为我在尝试使用唯一\u ptr调用线程时遇到了一个奇怪的错误。Thanx@JamesBlack我想你试图复制一个唯一的\u ptr
而不是移动它?无意冒犯,在继续之前,您可能想尝试一些基本的C++11。我忘记了我的变量不是指针,而不是new list(),我只是有一个导致问题的list,但当我使用unique_ptr时,我在VS2012的functional.hpp中遇到了一些错误,所以您的想法得到了解决。稍后我可能会尝试返回到unique_ptr。
void consumer(std::list<string> list) {
// accept by value!
}
std::list<string> machineQueue;
// hand-off to consumer
consumer(std::move(machineQueue));
machineQueue = std::list<string>{}; // new list