如何在共享内存中使用运算符“new”和“delete”
How can i use operators `new` and `delete` within shared memory?
我想在使用共享内存的多个程序之间共享一些对象。
我在这个网站上找到了例子。它没有任何对象分配,只有直接寻址,但我想在共享内存中创建结构或类。
因为内存已经分配,所以你想使用放置 new:
void * ptr = shmat(shmid, 0, 0);
// Handle errors
MyClass * x = new (ptr) MyClass;
然后,将在ptr
指向的内存中构造MyClass
的新实例。
当不需要该对象时,必须手动调用析构函数(不释放内存)。
ptr->MyClass::~MyClass();
可以使用放置 new 在任何合适的对齐存储中创建对象:
void* storage = get_aligned_shared_memory();
T* object = new (storage) T();
也就是说,您是否考虑过为此使用诸如Boost.Interprocess之类的库。
相关文章:
- 运算符C++ "delete []"仅删除 2 个前值
- g++用户定义的动态链接库上的全局new和delete运算符
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- 为什么 std::vector 使用 std::分配器而不是运算符 new 和 delete?
- 使用 delete [] 运算符取消分配类中数据成员的内存
- delete运算符如何处理c中的指针
- 在析构函数中调用"delete"运算符时"compiler is out of heap space"编译器错误
- 重载运算符 new 和运算符 delete 带有三个参数
- 如果我为一个类编写new和delete运算符,我是否必须编写它们的所有重载
- 运算符 delete[] 有什么作用?
- 编译Qt项目给出了对运算符delete(void*,unsigned int)的未定义引用
- 大小运算符 delete[] 永远不会被调用
- ::运算符 delete(指针) 返回释放的字节大小
- C++:运算符delete(void*)受到保护
- C++中的大小释放:全局运算符delete的正确行为是什么(void*ptr,std::size_t size)
- 将运算符new和运算符delete与自定义内存池/分配器一起使用
- 调用运算符delete时的断言
- 我将如何使用大小运算符delete/delete[],以及它们为什么更好
- 取消运算符delete[]中的析构函数调用