在初始化時保護共享數據
案例1. std::call_once使用,該案例中發送信息和接受信息都需要打開連接,但是這兩個地方只需要調用一次打開連接即可。
class X
{
private:
connection_info connection_detail;
connection_handle connection;
std::once_flag connection_init_flag;
void open_connection()
{
connection = connection_manager.open(connection_details);
}
public:
X(connection_info const& connection_details_):
connection_details(connection_details_)
{}
void send_data(data_packet const& data)
{
std::call_once(connection_init_flag, &X::open_connection, this); //發送信息需要打開連接
connection.send_data(data);
}
data_packet receive_data()
{
std::call_once(connection_init_flag, &X::open_connection, this); //接受信息需要打開連接
return connection.receive_data();
}
};