单个对象的构造函数和析构函数被调用两次

时间:2012-11-08 10:24:16

标签: c++ linux singleton valgrind

我在c ++中面临单例对象的问题。以下是解释:

问题信息: 我有一个4个共享库(比如libA.so,libB.so,libC.so,libD.so)和2个可执行的二进制文件,每个文件使用另一个处理文件的共享库(比如libE.so)。

libE.so的目的是将数据写入文件,如果可执行文件重新启动或文件大小超过某个限制,则会压缩该文件,并在名称中创建一个带有时间戳的新文件。它使用单例对象。它导出一个处理程序类,用于获取和使用单例。压缩只发生在上述两种情况中。用户/加载程序可执行文件可以指定文件的起始名称,只有处理程序类不提供其他控件。

libA.so,libB.so,libC.so和libD.so几乎具有相同的行为。它们都有一个类和声明和一个处理程序的对象,它在libE.so中获取单例的实例并将其用于进一步的目的。

所有这些库都链接到两个可执行的二进制文件。如果只运行两个可执行文件中的一个,那么它很好,但是如果两个可执行文件一个接一个地运行,那么第一个启动的可执行文件的文件就会被压缩。

调试信息: 单例对象的构造函数和析构函数被调用两次。(对于每个可执行文件)

singleton的对象是一个静态对象,永远不会被删除。

可执行文件无法退出/返回给出:

* glibc检测到* (exe1或exe2):双重免费或损坏(!prev):some_addr *

使用二进制文件运行valgrind会导致上述错误是由单例对象的析构函数引起的。

由于

0 个答案:

没有答案