双端队列 emplace_back 指向对象的新指针

Deque emplace_back New Pointer To Object

我正在创建一个指向新对象的新指针,并立即 push_front 进入双端队列。我想改为使用 emplace_front 但出现编译器错误。

我的对象构造函数需要 1 个字符串参数。

std::deque<NetPacket*> q_IncomingPackets;

q_IncomingPackets.push_back(new NetPacket(std::string(uncompressed_data, retVal))));
q_IncomingPackets.emplace_back(std::string(uncompressed_data, retVal));

根据其他网站的参考,我认为我可以简单地将 push_back 换成 emplace_back,但出现以下错误:

Error   C2440   'initializing': cannot convert from 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' to 'PeerNet::NetPacket *' PeerNet \vc\include\xmemory0    737

这些参考文献没有谈论在创建指向对象的新指针时使用 emplace,只有具体的对象。 cppreference.com cplusplus.com

std::deque::emplace_back 期望 Args&&... args 构造 value_type,这里是 NetPacket*.

无法从 std::string 构造 NetPacket*,这就是编译器错误显示的原因。

由于您的值类型是 NetPacket*(它是一个原始指针),因此 push_backemplace_back 之间没有太大区别。