Deque emplace_back指向对象的新指针

Deque emplace_back New Pointer To Object

本文关键字:新指针 指针 对象 emplace back Deque      更新时间:2023-10-16

我正在创建一个指向新对象的新指针,并立即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 vcincludexmemory0    737

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

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

没有办法从std::string构造NetPacket*,这就是编译器错误的原因。

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