由另一个对象生命周期/范围返回的 C++ 对象引用

问题描述

我目前正在研究各种“可挂载”文件格式的递归阅读器/解包器的想法。例如,它应该允许读取存储在 NTFS 目录结构中的 vmdk 文件中的压缩文件

目前我只有这个标题,我使用 CZipMounter.mount 在内存中加载和预解析 zip 文件 - 这填充了 vecEntries文件信息的私人列表(以及一组尚未提到了 zip 解析变量)。然后调用调用 CZipMounter.openDir,它返回迭代器对象引用(~等效于 POSIX DIR)。 CZipIterator 必须有权访问 CZipMounter (至少我认为它必须,有一个句柄打开底层文件,句柄解压缩库等)。然后调用者可以在 while 循环中调用 CZipIterator.readDir。当 CZipIterator 实例被销毁时,它相当于 POSIX CloseDir

现在我对 CZipMounter 的范围/生命周期问题迷失了方向。因为如果它被过早销毁,所有 CZipIterator 实例都会有指向已销毁对象的指针(或引用,IMO 无关紧要)。

基本上我可能有两个完全不同的问题:

  1. 这里有没有更好的方法来实现这种递归?不知何故,我不认为将所需数据从 Mounter 复制到 Iterator 是个好主意。
  2. 如果我的示例确实有意义,那么如何防止 CZipMounter 过早销毁(即,我希望 CZipMounter 在所有 `CZipIterator~ 实例之后被销毁。

整个事情计划稍微复杂一些,因为会有更多的 CXXXMounter 类和一个虚拟的 CMotherOfAllMounters 类。

enum commonDirTypes
{
    myFILE = 0,myDIR = 1
};

struct commonDirEntry
{
    std::string entryName;
    enum commonDirTypes entryType;
};

struct zipDirEntry : commonDirEntry
{
    std::vector<zipDirEntry> vecEntries;
};

class CZipMounter;

class CZipIterator
{
    public:
        //readDir must return type of object and whether or not we can continue reading
        struct zipDirEntry* readDir();
    private:
        CZipMounter* pMount;
};

class CZipMounter
{
    public:
        bool mount(const char*);
        CZipIterator& openDir(const char*);
    private:
        std::vector<zipDirEntry> vecEntries;
};

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...