我正在跟踪构造函数及其被破坏的实例,为此我计划在构造函数和析构函数中记录“this”的值。我不知道在构造函数中记录“this”的值是否安全。如果它不安全那么我不想知道它会失败的场景吗?
答案 0 :(得分:8)
如果通过“记录”意味着“将值写为例如十六进制地址到日志文件”,那就很好并且安全。如果没有,请澄清。
在构造函数调用完成之前,对象尚未完全构造。所以在此之前(即在构造函数内)将this
发布到程序的其余部分是不安全的。因为这可能导致有人试图实际使用半构造的对象。这可能会导致细微且难以发现的错误。
发布this
可能意味着以下任何一种情况:
将this
的地址写入文件不会将其发布到您的程序的其余部分*所以它应该没问题。
* 好吧,除非你之后做了一些非常神秘的事情,比如从不同的线程/进程中的文件中加载地址并将其转换回对象指针......这本身已经不够安全了: - )子>
答案 1 :(得分:0)
为什么你认为它不安全?只要这些对象有效,记录任何对象的地址就没有什么不同。
它的长短之处在于它在您打算使用它的场景中是安全的。
答案 2 :(得分:0)
首先分配内存,然后设置this
,然后调用构造函数。因此,您可以在构造函数中使用this
,因为它指向正确的位置 - 构造不会更改this
。但是,如果构造失败(抛出),内存将消失,this
指向的值将是垃圾,因此您不应该存储它并将其用于构造函数之外的任何内容,直到您知道构造将成功为止。