通过阅读这篇文章,很明显 C++ 中的放置消息用于在预分配的内存位置调用类构造函数。
在内存已经初始化的情况下,placement new 还是 reinterpret_cast 更合适?
例如,假设我从 TCP 套接字读取表示帧消息的原始字节流。我将此流放入帧同步并检索一个已知大小的缓冲区,该缓冲区代表我的类,我将其称为 Message。我知道有两种方法可以继续。
创建一个带有标志的构造函数,告诉类不要初始化。在传递“不初始化”标志的缓冲区上做一个新的放置。
Message::Message( bool initialize ) { // // Initialize if requested // if( initialize ) { Reset( ); } } void Message::Reset( void ) { m_member1 = 1; m_member2 = 2; } Message* message = new ( buffer ) Message( false );
使用 reinterpret_cast
Message* message = reinterpret_cast< Message* > ( buffer );
我相信这两者都会产生相同的结果。一个比另一个更正确、更面向对象、更安全、更易于阅读还是更好的风格?