Я изучаю общую память Boost, чтобы применить ее к моему проекту OpenCV.Это два фрагмента для тестирования.
class.h
#ifndef _class_H_
#define _class_H_
class Myclass{
public:
Myclass() : number(0){}
int number;
};
#endif
write.cpp
#include <boost/interprocess/managed_shared_memory.hpp>
#include <cstdlib>
#include <iostream>
#include "include/class.h"
int main(int argc, char *argv[]){
using namespace boost::interprocess;
struct shm_remove{
shm_remove() { shared_memory_object::remove("MySharedMemory"); }
~shm_remove(){ shared_memory_object::remove("MySharedMemory"); }
} remover;
managed_shared_memory segment(create_only, "MySharedMemory", 65536);
Myclass *instance = segment.construct<Myclass>("instance1")();
instance = new Myclass();
std::system("read.exe");
std::cout << instance->number << std::endl;
return 0;
}
read.cpp
#include <boost/interprocess/managed_shared_memory.hpp>
#include <cstdlib>
#include <iostream>
#include "include/class.h"
int main(int argc, char *argv[]){
using namespace boost::interprocess;
managed_shared_memory segment(open_only, "MySharedMemory");
std::pair<Myclass*, managed_shared_memory::size_type> res;
res = segment.find<Myclass> ("instance1");
res.first->number = 3;
return 0;
}
Конечновыходные данные должны быть 3, но это 0, что означает, что класс не изменен.Как я могу изменить объект в общей памяти?