Изменение объекта в Boost shared_memory - PullRequest
0 голосов
/ 24 ноября 2018

Я изучаю общую память 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, что означает, что класс не изменен.Как я могу изменить объект в общей памяти?

...