【发布时间】:2010-08-17 09:11:10
【问题描述】:
我正在整理一个我要调用文件的类。
文件对象只包含一个指向内存映射文件的指针和一个链接。
构造函数获取一个文件并将该文件映射到内存范围。总而言之,它看起来 有点像这样:
class file
{
public:
file(unsigned char* filename) { open(filename); }
open(unsigned char* filename)
{
/// snip
length_ = fstat(.....)
file_ = mmap(.....)
}
private:
unsigned int length_;
unsigned char* bytes_;
};
现在,这个文件对象可以被复制了。
乐趣来了。通常,像这样的类需要一个深拷贝构造函数来复制 bytes_。但是,我很满意我可以复制指针,因为内存是共享的,无论如何它应该查看同一个文件。我不想 重新映射文件。但是,显然,为了防止内存泄漏 bytes_ 在某些时候会 需要释放。
我可以使用哪些机制来决定何时删除内存和 munmap?
我正在考虑使用 boost::shared_ptr 以便仅在它是最后一个引用时释放析构函数中的内存,但我必须用互斥锁来保护它,对吗? 是否有一些方便的增强功能供我使用?我不想拉另一个大图书馆,这不是一个选择。
即
boost::shared_ptr<unsigned char> bytes_;
~file()
{
// enter some sort of critical section
if (bytes_.unique()){
munmap(bytes_);
bytes_ = 0;
}
// exit critical section
}
【问题讨论】:
-
刚刚注意到。所有班级成员都是私有的。