目前我正在开发一个极简主义的ZIP 2.0库.
按照"阅读f*ckin"手册的座右铭,我阅读了PKWARE的appnote,所以我知道只包含"中央目录记录结束"的ZIP存档被认为是空的.此记录最后定义了一个可变大小的"归档注释",这就是为什么在加载中心目录时必须向后扫描以搜索签名"PK\5\6"的原因.这让我有两个问题:
1)当用户尝试添加包含此序列的存档注释时,我该怎么办?
2)空档案是否允许发表评论?(当存档为空时,WinRAR无法显示它,而7-Zip是)
更新:
我曾与WinRAR的首席开发人员Roshal先生进行过电子邮件联系.他确认2)是WinRAR中的一个现在修复的错误.
考虑以下代码(最小版本):
#include <iostream>
struct Base
{
virtual ~Base() {}
virtual void test() const { std::cout << "base"; }
};
struct Derived : public Base
{
void test() const { std::cout << "derived"; }
};
struct Composite
{
const Derived &ref;
Composite(const Derived &ref) : ref(ref) {}
void testRef() const { ref.test(); }
};
int main()
{
Composite c((Derived()));
c.testRef();
}
Run Code Online (Sandbox Code Playgroud)
当使用最新的MinGW g ++时,这实际上产生了"基础"!这是编译器错误还是我错过了什么?有人可以在VS中测试这个吗?
我认为自己是一位经验丰富的C++程序员,经常使用多态,基于堆栈的引用,临时对象(C++标准12.2)等.因此我知道应该应用终身延长.
只有在Base(虚拟或非虚拟)中定义析构函数并使用临时(即后续用法生成'derived')时,才会出现此行为:
int main()
{
Derived d;
Composite c(d);
c.testRef();
}
Run Code Online (Sandbox Code Playgroud)