在构造函数中记录this的值是否安全

时间:2012-04-21 08:05:42

标签: c++ constructor this

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

3 个答案:

答案 0 :(得分:8)

如果通过“记录”意味着“将值写为例如十六进制地址到日志文件”,那就很好并且安全。如果没有,请澄清。

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

发布this可能意味着以下任何一种情况:

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

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

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

答案 1 :(得分:0)

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

它的长短之处在于它在您打算使用它的场景中是安全的。

答案 2 :(得分:0)

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