共有メモリ上にオブジェクトをつくってみました

Cでは共有メモリをつかって、異なるプロセス間でメモリ共有が可能です。たとえば

に例文が書いてありますが

#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int main(){
...
    if( ( id = shmget(IPC_PRIVATE,512,IPC_CREAT|0666))== -1){
        perror("shmget");
        exit(-1);
    }
    if( ( adr= shmat(id,0,0) )== -1){
        perror("shmat");
    }
}
で確保。あとはadr上に入出力をおこなえばよろしい。最後は
      if(shmdt(adr)== -1){
            perror("shmdt");
        }
    if(shmctl(id,IPC_RMID,0)== -1){
        perror("shmctl");
    }
と解放します。それではC++であるクラスのオブジェクトをこの共有メモリ上に作るにはどうしたら良いでしょうか?
    T*  ptr =  new ( adr ) T();
ですね。最後のデストラクタによる処理を行ないたい場合は
   ptr->T::~T();
で直接呼び出してあげましょう。

プロセスをforkして、子プロセスからオブジェクトを操作してあげれば、親がわでオブジェクトの状態が変化するのを確認できるはずです。

たのしい。