使用 new 分配的过滤器/StringSink 是否需要删除?

Does a filter / StringSink allocated with new require a delete?

考虑代码行:

StringSource( cipher ,
              true   ,
              new PK_DecryptorFilter( rng       ,
                                      decrypter ,
                                      new StringSink( plainText ) ) );

过滤器和 StringSink 对象是使用 new 创建的,现在我很好奇我是否负责删除它们,因为我不确定我会怎么做,因为我需要指向这些对象的指针。

在查看测试项目时,我似乎找不到删除项,所以我猜这些对象在完成工作后会自动删除。

但是由于文档可能是错误的,我想我会确定一下。

查看那些 类 的 header and source,他们最终都将附件分配给自动处理删除的 member_ptr。你不应该自己删除它们,让图书馆处理它。

Does a filter / StringSink allocated with new require a delete?

在您提供的情况下,答案是否定的。你不需要删除它。来自 Readme.txt 重要使用说明 下:

  1. If a constructor for A takes a pointer to an object B (except primitive types such as int and char), then A owns B and will delete B at A's destruction. If a constructor for A takes a reference to an object B, then the caller retains ownership of B and should not destroy it until A no longer needs it.

另请参阅 Pipelining 上的 Crypto++ wiki 页面。它是更高层次的设计视角,对象所有权是其中的一个细节。


Readme.txt 中列出了第二条重要说明。这是:

  1. Crypto++ is thread safe at the class level. This means you can use Crypto++ safely in a multithreaded application, but you must provide synchronization when multiple threads access a common Crypto++ object.