<table><tr><td style="">zzag added a comment.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D23582">View Revision</a></tr></table><br /><div><div><blockquote style="border-left: 3px solid #8C98B8;
          color: #6B748C;
          font-style: italic;
          margin: 4px 0 12px 0;
          padding: 8px 12px;
          background-color: #F8F9FC;">
<div style="font-style: normal;
          padding-bottom: 4px;">In <a href="https://phabricator.kde.org/D23582#522457" style="background-color: #e7e7e7;
          border-color: #e7e7e7;
          border-radius: 3px;
          padding: 0 4px;
          font-weight: bold;
          color: black;text-decoration: none;">D23582#522457</a>, <a href="https://phabricator.kde.org/p/davidedmundson/" style="
              border-color: #f1f7ff;
              color: #19558d;
              background-color: #f1f7ff;
                border: 1px solid transparent;
                border-radius: 3px;
                font-weight: bold;
                padding: 0 4px;">@davidedmundson</a> wrote:</div>
<div style="margin: 0;
          padding: 0;
          border: 0;
          color: rgb(107, 116, 140);"><p>So instead of N classes able to access one method they don't need, we have one class which can access all X11WindowedOuptut's private's which it doesn't need. <br />
 It gets downcast to everyone outside of X11WindowedBackend, so init() isn't a visible method to any other class outside of the x11/windowed folder.</p></div>
</blockquote>

<p>Such reasoning won't get us anywhere because I can ask "why would N classes have to be able to call init() method which will lead to undefined behavior when kwin compiled w/o Q_ASSERT?"</p>

<p>It's all about maintaining good public interface. Sometimes it's worth to keep "create" or "init" method public, but in most cases it's discouraged. Even though this code is in "platforms/whatever", it doesn't mean that we should stop writing good code.</p>

<p>Keeping init() public is bad because it pollutes the public interface with implementation details of the class as well it's not safe to call init() many times. In either case encapsulation is "meh," but at least it's less severe with friend class.</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>R108 KWin</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D23582">https://phabricator.kde.org/D23582</a></div></div><br /><div><strong>To: </strong>zzag, KWin<br /><strong>Cc: </strong>davidedmundson, kwin, LeGast00n, The-Feren-OS-Dev, sbergeron, jraleigh, fbampaloukas, GB_2, mkulinski, ragreen, jackyalcine, Pitel, iodelay, crozbo, bwowk, ZrenBot, ngraham, alexeymin, himcesjf, lesliezhai, ali-mohamed, hardening, romangg, jensreuterberg, abetts, sebas, apol, mart<br /></div>