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

时间:2015-03-16 14:00:10

标签: c++ new-operator crypto++ delete-operator

考虑代码行:

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

过滤器和StringSink对象是使用new创建的,现在我很好奇我是否有责任删除这些内容,因为我不确定如何执行此操作因为我需要指向这些对象的指针。

在查看测试项目时,我似乎无法找到删除内容,因此我猜测这些对象会在作业完成后自动删除。

但由于文件可能有误,我认为我确定了。

2 个答案:

答案 0 :(得分:2)

查看这些类的headersource,这两个类最终都会将其附件分配给自动处理删除的member_ptr。你不应该自己删除它们,只是让库来处理它。

答案 1 :(得分:0)

  

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

如果您提供的话,答案是否定的。您无需删除它。来自重要使用说明下的Readme.txt

  
      
  1. 如果A的构造函数接受指向对象B的指针(除了诸如int和char之类的基本类型),则A拥有B并将删除B   在A的破坏。如果A的构造函数引用了一个   对象B,然后调用者保留B的所有权,不应该   摧毁它直到A不再需要它。
  2.   

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


Readme.txt中列出了第二个重要提示。这是:

  
      
  1. Crypto ++在类级别是线程安全的。这意味着您可以在多线程应用程序中安全地使用Crypto ++,但您必须提供   多个线程访问公共Crypto ++对象时的同步。
  2.