是否可以捕获 std::call_once 中使用的函数的 return 值?
Is it possible to capture return value of function used in std::call_once?
假设我有一个函数 returning 一个昂贵的对象,我希望它在访问函数的 return 值时恰好调用一次。
这可以通过 std::once_flag
和 std::call_once
实现,还是我需要使用布尔标志等?
简单示例:
using namespace boost::interprocess;
shared_mempry_object openOrCreate(const char* name)
{
shared_memory_object shm(open_or_create, name, read_write);
return shm;
}
我有办法从某个例程调用此函数并确保在保持 return 值的同时仅使用提到的原语调用一次吗?
简单地使用静态函数变量。
using namespace boost::interprocess;
shared_mempry_object& openOrCreate(const char* name)
/// ^ return by reference to prevent copy.
{
static shared_memory_object shm(open_or_create, name, read_write);
// ^^^^^^ Make it static.
// This means it is initialized exactly once
// the first time the function is called.
//
// Because it is static it lives for the lifetime
// of the application and is correctly destroyed
// at some point after main() exits.
return shm; // return a fererence to the object
}
您可以添加一些包装器以保证在应用程序结束时 clean-up。
假设我有一个函数 returning 一个昂贵的对象,我希望它在访问函数的 return 值时恰好调用一次。
这可以通过 std::once_flag
和 std::call_once
实现,还是我需要使用布尔标志等?
简单示例:
using namespace boost::interprocess;
shared_mempry_object openOrCreate(const char* name)
{
shared_memory_object shm(open_or_create, name, read_write);
return shm;
}
我有办法从某个例程调用此函数并确保在保持 return 值的同时仅使用提到的原语调用一次吗?
简单地使用静态函数变量。
using namespace boost::interprocess;
shared_mempry_object& openOrCreate(const char* name)
/// ^ return by reference to prevent copy.
{
static shared_memory_object shm(open_or_create, name, read_write);
// ^^^^^^ Make it static.
// This means it is initialized exactly once
// the first time the function is called.
//
// Because it is static it lives for the lifetime
// of the application and is correctly destroyed
// at some point after main() exits.
return shm; // return a fererence to the object
}
您可以添加一些包装器以保证在应用程序结束时 clean-up。