Работаю с QSharedMemory. Если создавать ее экземпляры в разных проектах, то указатель на данные один и тот же. Но если в одном проекте создать несколько копий, то указатели разные, хотя все работает! В чем дело?
#include <QApplication>
#include <QWidget>
#include <QSharedMemory>
#include <iostream>
class A{
public:
A() :mem("testmem")
{
if (!mem.create(sizeof(int))){
std::cout << "FTimeAttach: " << mem.attach() << std::endl;
}
else{
std::cout << "FTimeCreate!, SET ONLY HERE" << std::endl;
set(7);
}
}
QSharedMemory mem;
void set(int i){
*(int*)mem.data() = i;
}
void print(){
std::cout << mem.data() << std::endl;
std::cout << *(int*)mem.data() << std::endl;
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
A a;
a.print();
A b;
b.print();
b.set(45);
A c;
c.print();
std::cout << "again" << std::endl;
a.print();
std::cout << "EBDL:" << a.mem.data() << std::endl; // Different
std::cout << "EBDL:" << b.mem.data() << std::endl; // Pointers
std::cout << "EBDL:" << c.mem.data() << std::endl; // Each time
return app.exec();
}
Результат работы:
FTimeAttach: 1
0x2b92c000
45
FTimeAttach: 1
0x2bf5f000
45
FTimeAttach: 1
0x2bf60000
45
again
0x2b92c000
45
EBDL:0x2b92c000
EBDL:0x2bf5f000
EBDL:0x2bf60000
Бывало, что замечал разные указатели и в разных проектах. Что это и как это работает?