1
在boost进程的所有示例中,我只能看到它在main()
中被初始化。指向boost进程的managed_shared_memory
#include <boost/interprocess/managed_shared_memory.hpp>
#include <iostream>
using namespace boost::interprocess;
int main()
{
shared_memory_object::remove("Boost");
managed_shared_memory managed_shm(open_or_create, "Boost", 1024);
int *i = managed_shm.construct<int>("Integer")(99);
std::cout << *i << '\n';
std::pair<int*, std::size_t> p = managed_shm.find<int>("Integer");
if (p.first)
std::cout << *p.first << '\n';
}
而不是专门升压的问题,这更是一个C++的问题,我知道我可以创建一个对象,并使用初始化列表初始化managed_shm
的,但我想知道是否有声明它的方式像managed_shared_memory * managed_shm;
,后来将其初始化为managed_shm = new managed_shm(open_or_create, "Boost", 1024);
?
我看过managed_shared_memory
标题,他们似乎没有提供任何选项。
谢谢。我不希望它在初始化列表中的一个原因是,如果它抛出,我无法处理异常。其他原因是能够像我在我的问题中提到的那样宣布它。 – Nav
@Nav原因1:[功能级别尝试块](http://coliru.stacked-crooked.com/a/2bd29f62e6095222)原因2:请参阅我的回答:/。更好的选择:[提取一个函数](http://coliru.stacked-crooked.com/a/55f21ee69e15fee2)或者只使用[可选](http://coliru.stacked-crooked.com/a/f5fdb50b1af68d50) – sehe
总结:不要使用'new'和'delete'。你几乎总是可以避免它(以及随之而来的类错误) – sehe