获取指向 boost 进程间 managed_shared_memory 的指针
Getting pointers to managed_shared_memory of boost interprocess
在boost进程间的所有例子中,我只看到它在main()
中被初始化。
#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++ 问题,我知道我可以创建一个 object 并使用初始化列表初始化 managed_shm
,但我想知道是否有是一种像 managed_shared_memory * managed_shm;
一样声明它然后像 managed_shm = new managed_shm(open_or_create, "Boost", 1024);
一样初始化它的方法吗?
我看过 managed_shared_memory
header,他们似乎没有提供任何选项。
当然可以。就这么写吧
#include <boost/interprocess/managed_shared_memory.hpp>
#include <iostream>
namespace bip = boost::interprocess;
struct MyWorker : boost::noncopyable {
MyWorker()
: _shm(new bip::managed_shared_memory(bip::open_or_create, "089f8a0f-956a-441d-9b9e-e0696c43185f", 10ul<<20))
{}
~MyWorker() {
delete _shm;
}
private:
bip::managed_shared_memory* _shm;
};
int main() {
MyWorker instance;
}
Live On Coliru 使用 managed_mapped_file
而不是共享内存(Coliru 不支持)
当然,更喜欢智能指针。
或者问问自己为什么需要动态分配(我想不出一个合理的理由)
我使用了某种 API,它(错误地!)需要一个指针,只需取地址:
bip::managed_shared_memory shm(bip::open_or_create, "SHM_NAME", 10ul<<20);
// calling a badly design API takes a pointer:
misguided_api_foo(&shm);
在boost进程间的所有例子中,我只看到它在main()
中被初始化。
#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++ 问题,我知道我可以创建一个 object 并使用初始化列表初始化 managed_shm
,但我想知道是否有是一种像 managed_shared_memory * managed_shm;
一样声明它然后像 managed_shm = new managed_shm(open_or_create, "Boost", 1024);
一样初始化它的方法吗?
我看过 managed_shared_memory
header,他们似乎没有提供任何选项。
当然可以。就这么写吧
#include <boost/interprocess/managed_shared_memory.hpp>
#include <iostream>
namespace bip = boost::interprocess;
struct MyWorker : boost::noncopyable {
MyWorker()
: _shm(new bip::managed_shared_memory(bip::open_or_create, "089f8a0f-956a-441d-9b9e-e0696c43185f", 10ul<<20))
{}
~MyWorker() {
delete _shm;
}
private:
bip::managed_shared_memory* _shm;
};
int main() {
MyWorker instance;
}
Live On Coliru 使用 managed_mapped_file
而不是共享内存(Coliru 不支持)
当然,更喜欢智能指针。
或者问问自己为什么需要动态分配(我想不出一个合理的理由)
我使用了某种 API,它(错误地!)需要一个指针,只需取地址:
bip::managed_shared_memory shm(bip::open_or_create, "SHM_NAME", 10ul<<20);
// calling a badly design API takes a pointer:
misguided_api_foo(&shm);