通过阅读这篇文章,很明显c ++中的放置新闻用于在预先分配的内存位置上调用类构造函数.
在内存已经初始化的情况下,是新的贴图还是reinterpret_cast更合适?
例如,假设我读取了一个原始字节流,表示来自TCP套接字的成帧消息.我把这个流放入一个framesync并检索一个代表我的类的已知大小的缓冲区,我称之为Message.我知道有两种方法可以继续.
创建一个带有标志的构造函数,告诉类不要初始化.通过"不初始化"标志在缓冲区上执行new放置.
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 );
Run Code Online (Sandbox Code Playgroud)使用reinterpret_cast
Message* message = reinterpret_cast< Message* > ( buffer );
Run Code Online (Sandbox Code Playgroud)我相信这两者都会产生相同的结果.一个优先于另一个是更正确,更OO,更安全,更容易阅读或更好的风格?