1

我正在跟踪构造函数及其被破坏的实例,为此我计划在构造函数和析构函数中记录“this”的值。我不知道在构造函数中记录“this”的值是否安全。如果它不安全,那么我不想知道它会失败的场景?

4

3 回答 3

8

如果通过“记录”您的意思是“将值作为例如十六进制地址写入日志文件”,那么它很好且安全。如果不是,请澄清。

在构造函数调用完成之前,对象不会完全构造。this所以在此之前(即从构造函数中)发布到程序的其余部分是不安全的。因为这可能会导致有人试图实际使用半构造的对象。这可能会导致微妙且难以发现的错误。

发布this可能意味着以下情况之一:

  • 将其作为参数传递给外部(非成员)函数,
  • 将其存储在其他对象可用的数据结构中,
  • (为了完整起见:从函数调用中返回它——这不适用于这种特定情况,因为你不能从构造函数返回任何东西)。

因此,将文件的地址写入this文件不会将其发布到程序的其余部分*,所以应该没问题。

*好吧,除非你之后做一些非常神秘的事情,比如在不同的线程/进程中从文件中加载地址并将其转换回对象指针......这本身就已经足够不安全了 :-)

于 2012-04-21T08:08:08.443 回答
0

为什么你会认为它不安全?事实上,只要这些对象是有效的,记录任何对象的地址就没有什么不同。

总而言之,它在您打算使用它的场景中是安全的。

于 2012-04-21T08:09:54.223 回答
0

首先分配内存,然后this设置内存,然后调用构造函数。所以你可以this在构造函数期间使用,因为它指向正确的位置 - 构造不会改变this。但是,如果构造失败(抛出),内存将消失并且指向的值this将是垃圾,因此您不应该存储它并将其用于构造函数之外的任何内容,直到您知道构造将成功。

于 2012-04-21T08:27:15.463 回答