+1, this pattern looks like asking for UB<br><div class="gmail_quote"><div dir="ltr">On Mon, Nov 20, 2017 at 11:57 AM Leonard Mosescu via lldb-dev <<a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px">        void Clear() {<br></span><span style="font-size:12.8px">          this->~ClassName();<br></span><span style="font-size:12.8px">          new (this) ClassName();<br></span><span style="font-size:12.8px">        }</span></blockquote><div><br></div></div><div dir="ltr"><div>My 2c: this is clever, but not without downsides:</div><div>1. It may do more than intended (it will destroy all members / bases)</div><div>2. It forces construction and 'reset' to be exactly the same, which is not always desirable</div><div>3. Most importantly if you really want a freshly initialized object, just do that (create a new object)</div><div><br></div><div>I like in-class initializers, but for clear/reset operations I prefer a standalone operation. And as Pavel suggested, calling 'clear' from the constructor is a good way to factor out commonality.</div><div><br></div><div> </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Nov 19, 2017 at 6:58 AM, Jan Kratochvil via lldb-dev <span dir="ltr"><<a href="mailto:lldb-dev@lists.llvm.org" target="_blank">lldb-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
<a href="https://reviews.llvm.org/D40212" rel="noreferrer" target="_blank">https://reviews.llvm.org/D40212</a><br>
<br>
At least DWARFCompileUnit and I see even for example MachVMRegion duplicate<br>
intialization of fields in both their constructor and Clear().  Moreover the<br>
initialization is in different place than declaration of the member variable.<br>
<br>
Is it OK to just use in-class member variable initializers and:<br>
        void Clear() {<br>
          this->~ClassName();<br>
          new (this) ClassName();<br>
        }<br>
?<br>
<br>
Pavel Labath otherwise suggests to just call Clear() from the constructor.<br>
Still then I find the code could be more readable with in-class members<br>
initializers - moreover during further refactorizations+extensions.<br>
<br>
<br>
Thanks,<br>
Jan Kratochvil<br>
_______________________________________________<br>
lldb-dev mailing list<br>
<a href="mailto:lldb-dev@lists.llvm.org" target="_blank">lldb-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev</a><br>
</blockquote></div><br></div>
_______________________________________________<br>
lldb-dev mailing list<br>
<a href="mailto:lldb-dev@lists.llvm.org" target="_blank">lldb-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev</a><br>
</blockquote></div>