Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++11 如何对std::list变量使用std::unique\u ptr_C++11_Unique Ptr - Fatal编程技术网

C++11 如何对std::list变量使用std::unique\u ptr

C++11 如何对std::list变量使用std::unique\u ptr,c++11,unique-ptr,C++11,Unique Ptr,我有一个消费者生产者的情况,我不断地将数据推到列表中,如果列表中还没有数据,那么每隔几秒钟我就会打包数据并将其发送到服务器 目前,我有一个线程,它会延迟几秒钟,唤醒,设置一个标志,这样就不会向列表中添加任何内容,进行打包,删除列表中已处理的项目,然后允许程序再次开始向列表中添加 这对于原型来说很好,但现在我需要让它在更现实的情况下工作得更好 因此,我想让生产者获得信息,当大小足够大或经过足够长的时间时,将列表传递给线程进行处理 我想将引用传递给列表,而unique_ptr将是有益的,因此一旦它被

我有一个消费者生产者的情况,我不断地将数据推到列表中,如果列表中还没有数据,那么每隔几秒钟我就会打包数据并将其发送到服务器

目前,我有一个线程,它会延迟几秒钟,唤醒,设置一个标志,这样就不会向列表中添加任何内容,进行打包,删除列表中已处理的项目,然后允许程序再次开始向列表中添加

这对于原型来说很好,但现在我需要让它在更现实的情况下工作得更好

因此,我想让生产者获得信息,当大小足够大或经过足够长的时间时,将列表传递给线程进行处理

我想将引用传递给列表,而unique_ptr将是有益的,因此一旦它被移动,producer线程就可以创建一个新的列表,并且出于所有实际目的,可以像以前一样使用相同的列表

但是当我试图从

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