双端队列 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_back
和 emplace_back
之间没有太大区别。
我正在创建一个指向新对象的新指针,并立即 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_back
和 emplace_back
之间没有太大区别。