当类具有mmap地址指针时,是否可以使用复制构造函数?我在想,mmap只被调用过一次,所以只有一个引用已经在内核中注册了。现在两个对象共享该地址,当删除1时,该地址会发生什么?我想这是清理。如果可能的话,mmap文件会为我处理同步吗?使用mmap地址复制构造函数
0
A
回答
2
shared_ptr
是你的朋友在这里:
#include <sys/mman.h>
#include <memory>
std::shared_ptr<void> map_some_memory(void *addr, size_t length,
int prot, int flags,
int fd, off_t offset)
{
auto deleter = [length](void* p) {
munmap(p, length);
};
// use of a custom deleter ensures that the mmap call is undone
// when the last reference to the memory goes away.
return { mmap(addr, length, prot, flags, fd, offset), deleter };
}
// some function that gets you a file descriptor
extern int alloc_fd();
int main()
{
int some_file = alloc_fd();
// allocate a shared mapping
auto my_mapped_ptr = map_some_memory(nullptr, 100, PROT_READ | PROT_WRITE,
MAP_SHARED, some_file, 0);
// cast it to sometthing else
auto shared_ints = std::shared_ptr<int>(my_mapped_ptr,
reinterpret_cast<int*>(my_mapped_ptr.get()));
// another shared pointer pointing to the shared ints
auto another_share = shared_ints;
}
+0
谢谢,我会研究这一点。我也想让我的课不可复制。 – user1876942
+0
@ user1876942在这种情况下,具有自定义删除类型的'unique_ptr'是您的朋友 –
相关问题
- 1. 如何使用复制构造函数
- 2. 复制构造函数?
- 3. 复制构造函数
- 4. Matlab复制构造函数
- 5. 复制构造函数bug
- 6. doubleLinkedList复制构造函数
- 7. 复制构造函数
- 8. Cython:复制构造函数
- 9. 复制构造函数 - C++
- 10. 矢量 - push_back使用默认的构造函数不复制构造函数
- 11. 隐式使用转换构造函数需要复制构造函数
- 12. 拷贝构造函数的地址
- 13. 复制构造函数去基础构造函数并覆盖复制值
- 14. 构造函数或复制构造函数?
- 15. Variadic模板构造函数和复制构造函数
- 16. 字符串类的构造函数和复制构造函数
- 17. 删除复制构造函数break继承构造函数
- 18. 通用集类 - 复制构造函数
- 19. 通用复制构造函数
- 20. Java调用复制构造函数
- 21. C++复制构造函数调用
- 22. 复制构造函数的调用
- 23. 复制构造函数调用析构函数C++
- 24. C++ - 构造函数,复制构造函数,移动构造函数,析构函数
- 25. 有一种方法来声明复制构造函数非公开和使用默认复制构造函数?
- 26. 为什么在调用复制构造函数之前调用构造函数?
- 27. 复制构造函数[数组] C++
- 28. 复制构造函数参数
- 29. 链接列表值的C++复制构造函数,而不是地址
- 30. 当调用复制构造函数或赋值构造函数时?
为什么底片?提供一些反馈。 – user1876942
我想,否定的,因为没有足够的信息让任何人回复你的querry。 –
这是一个普遍的问题。你可以把一个mmap指针放到拷贝构造函数中吗?你需要什么信息? – user1876942