[c++]代理對象模式

代理對象

<code class="hljs cpp has-numbering" style="display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="color: inherit;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#include <iostream></span>
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#include <vector></span></span></code><code class="hljs cpp has-numbering" style="display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">#include <string>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">using</span><span style="color:rgba(0, 0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">namespace</span><span style="color:rgba(0, 0, 0, 0);"> </span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">std</span><span style="color:rgba(0, 0, 0, 0);">;
</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span><span style="color:rgba(0, 0, 0, 0);"> </span><span style="color:#ff0000;">Vehicle?</span></code><code class="hljs cpp has-numbering" style="display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="color: inherit;">{<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span>:Vehicle() {}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">virtual</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">string</span> getName() = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;
};<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> Car : <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> </span><span style="color:#ff0000;">Vehicle?</span></code><code class="hljs cpp has-numbering" style="color: inherit; display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">{<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span>:Car()?</code><code class="hljs cpp has-numbering" style="color: inherit; display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">  {name = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"car"</span>;}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">virtual</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">string</span> getName()?</code><code class="hljs cpp has-numbering" style="color: inherit; display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">  {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> name;?</code><code class="hljs cpp has-numbering" style="color: inherit; display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">  }~Car()?</code><code class="hljs cpp has-numbering" style="display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="color: inherit;">  {<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span> << <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"delete"</span> << endl;}
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span>:<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">string</span> name;
};<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> Bike : <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> </span><span style="color:#ff0000;">Vehicle?</span></code><code class="hljs cpp has-numbering" style="color: inherit; display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">{<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span>:Bike() {}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">virtual</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">string</span> getName() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"bike"</span>; }
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span>:<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">string</span> name;
};</code><code class="hljs cpp has-numbering" style="color: inherit; display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> wrong_code(<span class="hljs-stl_container" style="box-sizing: border-box;"><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">vector</span><Vehicle *></span> &parkinglot)?</code><code class="hljs cpp has-numbering" style="color: inherit; display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">{Car c;<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span> << &c << endl;parkinglot[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>] = &c;  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//將c插入到parkinglot內</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span> << &(*parkinglot[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>]) << endl;
}</code><code class="hljs cpp has-numbering" style="color: inherit; display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> main()?</code><code class="hljs cpp has-numbering" style="color: inherit; display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">{<span class="hljs-stl_container" style="box-sizing: border-box;"><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">vector</span><Vehicle *></span> parkinglot(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);wrong_code(parkinglot);<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span> << parkinglot[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>]->getName() << endl;  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Oops!!parkinglot內存的地址指向了一塊被銷毀的內存</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span> << &(*parkinglot[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>]) << endl;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;
}</code><ul class="pre-numbering" style="color: rgb(51, 51, 51); box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li></ul>

0x7fff5fbff6d8?
0x7fff5fbff6d8?
delete

<code class="hljs javascript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;">
<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x7fff5fbff6d8</span>
<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x7fff5fbff6d8</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">delete</span>
亂碼。。。。
<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x7fff5fbff6d8</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>

在這種情況下會出現因為臨時對象在生命周期結束之后,對象上的內存被釋放,所以訪問它的數據就會出現不可預計的結果。

在這種大前提下,代理類就順勢而生了.

顧名思義,代理類就是指某個基類以及其子類的代理,其功能是使之能在容器中也表現出多態性.而沒有動態內存管理的煩惱.

現在定義Vehicle以及子類的代理類VehicleSurrogate.

<code class="hljs cpp has-numbering" style="color: inherit; display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#include <iostream></span>
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#include <vector></span></code><code class="hljs cpp has-numbering" style="display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">#include <string>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">using</span><span style="color:rgba(0, 0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">namespace</span><span style="color:rgba(0, 0, 0, 0);"> </span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">std</span><span style="color:rgba(0, 0, 0, 0);">;</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span><span style="color:rgba(0, 0, 0, 0);"> Vehicle?</span></code><code class="hljs cpp has-numbering" style="color: inherit; display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">{<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span>:Vehicle() {}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">virtual</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">string</span> getName() = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">virtual</span> Vehicle *copy() <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">virtual</span> ~Vehicle() {}  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//虛析構函數是為了支持多態.但是本例中并不需要.</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span>:
};<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> Car : <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> Vehicle?</code><code class="hljs cpp has-numbering" style="color: inherit; display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">{<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span>:Car() { name = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"car"</span>; }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">virtual</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">string</span> getName() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> name; }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">virtual</span> Vehicle *copy() <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Car; }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">virtual</span> ~Car() {}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span>:<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">string</span> name;
};<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> Bike : <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> Vehicle?</code><code class="hljs cpp has-numbering" style="display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="color: inherit;">{<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span>:Bike() { name = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"bike"</span>; }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">virtual</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">string</span> getName() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> name; }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">virtual</span> Vehicle *copy() <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Bike; }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">virtual</span> ~Bike() {}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span>:<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">string</span> name;
};<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> </span><span style="color:#ff0000;">VehicleSurrogate?</span></code><code class="hljs cpp has-numbering" style="color: inherit; display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">{<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span>:VehicleSurrogate() : p(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {}VehicleSurrogate(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> Vehicle &v) : p(v.copy()) {}VehicleSurrogate(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> VehicleSurrogate &vs) : p(vs.p ? vs.p->copy() : <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {}VehicleSurrogate &<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">operator</span>=(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> VehicleSurrogate &vs) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span> != &vs)  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//在刪除p之前一定得記得判斷vs和this是不是同一個,否則會有問題</span>{<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">delete</span> p;p = vs.p->copy();}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> *<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>;}<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">string</span> getName() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> p->getName(); }~VehicleSurrogate() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">delete</span> p; }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span>:Vehicle *p;
};</code><code class="hljs cpp has-numbering" style="color: inherit; display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> right_code(<span class="hljs-stl_container" style="box-sizing: border-box;"><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">vector</span><VehicleSurrogate></span> &parkinglot)?</code><code class="hljs cpp has-numbering" style="color: inherit; display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">{Car c;parkinglot.push_back(c);
}</code><code class="hljs cpp has-numbering" style="color: inherit; display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> main()?</code><code class="hljs cpp has-numbering" style="color: inherit; display: block; padding: 0px; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">{<span class="hljs-stl_container" style="box-sizing: border-box;"><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">vector</span><VehicleSurrogate></span> parkinglot;right_code(parkinglot);<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span> << parkinglot[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>].getName() << endl;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;
}</code><ul class="pre-numbering" style="color: rgb(51, 51, 51); box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li></ul>
<code class="hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;">car</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

所以,這種代理對象的模式實際上就是對對象的封裝,同時處理他們對他們進行資源管理,從而防止指針對象指向未被析構的對象地址,已經內存泄露的問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458673.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458673.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458673.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

this static 面向對象三大特點

面向對象三大特點&#xff1a;封裝、繼承、多態 封裝&#xff1a;只對外界提供有用的屬性和行為 this&#xff1a;是一個引用&#xff0c;總是指向當前對象 static 存放位置是方法區中的靜態區 static特點 static修飾的成員變量隨著類的加載就在靜態區中開辟內存 所…

fastQC

Fastqc用途 FastQC aims to provide a simple way to do some quality control checks on raw sequence data coming from high throughput sequencing pipelines. It provides a modular set of analyses which you can use to give a quick impression of whether your data …

C++代理 Surrogate

容器通常只能包含一種類型的對象&#xff0c;所以很難在容器中存儲對象本身。存儲指向對象的指針&#xff0c;雖然允許通過繼承來處理類型不同的問題&#xff08; 多態性 &#xff09;&#xff0c;但是也增加了內存分配的額外負擔。所以我們通過定義名為 代理 的對象來解決該問…

C++ Handle(句柄) part1

本文是我學習C&#xff0b;&#xff0b;沉思錄第6章的筆記 本文主要講述了Handle類的概念&#xff0c;定義方法以及寫時復制技術。 在前文(Surrogate代理類)的講解中我們了解到了代理的實現方法. 代理類有很多好處,但是麻煩的是每次都得進行復制.如果該類是經常使用并且member很…

sscanf的高級用法

sscanf的高級用法&#xff08;總結&#xff09; 2012-04-25 18:50:25分類&#xff1a; C/C sscanf(recvbuf,"%*[^/]/%[^ ]s",buf_rev); sscanf(buf, "GET /%[^ ]", buf_rev);這個是在一個webserver.c里面的例子&#xff0c;通過sscanf&#xff08;&#xf…

選擇排序 冒泡排序 二分查找

選擇排序 int [] arr {2,48,28,32,90,12}; for&#xff08;int i 0&#xff1b; i < arr.length - 1;i&#xff09;{ for(int j i 1; j < arr.length;j){ if(arr[i] < arr[j]){ int c; c arr[i]; arr[i] arr[j]; arr[j] c; } } } 冒泡排序 for(int i 0;i <…

C++, ID、指針、handle (void *)的區別

原文鏈接&#xff1a; http://hi.baidu.com/dandanfeng160/blog/item/4eaa3df5215bc42dbd310955.html 在Windows程序設計中&#xff0c;句柄是無法精確定義的術語。隨便找一個高手&#xff0c;讓他給你講講句柄是什么&#xff0c;恐怕他都很難給你一個具體的定義來。 在Wind…

Swift調用Objective C的FrameWork

很多Github的庫經過很多年的發展&#xff0c;源碼都是OC寫的&#xff0c;&#xff0c;所以&#xff0c;用Swift調用OC的庫就是開發中難免遇到的的一個問題&#xff0c;本文以AFNetworking為例&#xff0c;講解如何跨語言調用。 第一步 創建一個空的工程 注意&#xff0c;語言選…

命令行 java文本編輯工具 重載 內存區域 棧 堆

一、dir 列出當前目錄下的文件以及文件夾 md創建目錄 rd刪除目錄 cd 進入指定目錄 cd..返回到上一級目錄 &#xff1a; 切換盤符 比如&#xff1a; F: 二、editPlus 編寫程序 三、重載&#xff1a;在同一個class中&#xff0c;出現了函數名稱相同&#xff0…

數據結構(Java)——查找和排序(1)

1.查找的定義 查找是這樣一個過程&#xff0c;即在某個項目組中尋找某一指定目標元素&#xff0c;或者確定該組中并不存在該目標元素。 對其進行查找的項目的組有時也成為查找池。兩種常見的查找方式&#xff1a;線性查找和二分查找。為了能夠查找某一對象&#xff0c;我們就必…

GetProcAddress()用法

函數功能描述: GetProcAddress()函數檢索指定的動態鏈接庫(DLL)中的輸出庫函數地址。 函數原型&#xff1a; FARPROC GetProcAddress( HMODULE hModule, // DLL模塊句柄 LPCSTR lpProcName // 函數名 ); 參數&#xff1a; hModule [in] 包含此函數的…

支付寶問題LaunchServices: ERROR: There is no registered handler for URL scheme alipay

LaunchServices: ERROR: There is no registered handler for URL scheme alipay &#xff08;這句話其實是在告訴你 設備上沒有安裝 支付寶的客戶端,此時會走網頁端&#xff09;而有人會發現并沒有HTML5網頁彈出過一會&#xff0c;會發現服務器返回4000支付失敗&#xff0c;這…

C++string類常用函數 c++中的string常用函數用法總結

string類的構造函數&#xff1a; string(const char *s); //用c字符串s初始化 string(int n,char c); //用n個字符c初始化 此外&#xff0c;string類還支持默認構造函數和復制構造函數&#xff0c;如string s1&#xff1b;string s2"hello"&#xff1b;都是正…

排列與組合

話說&#xff0c;初一的時候看到這樣一道題&#xff1a;有一種彩票中獎率為1%&#xff0c;買一百張是不是一定能中獎&#xff1f;答案自然是否定的&#xff0c;但我在想&#xff0c;如果有200張彩票&#xff0c;兩張有獎&#xff0c;買一百張中獎率是多少&#xff1f;一天晚上睡…

剔除服務器返回的NSNull格式的數據

服務器返回NSNull格式的數據&#xff0c;真。。的煩人 解決辦法&#xff1a;在AFN請求里面加上下面兩段代碼&#xff0c;OK AFJSONResponseSerializer *response (AFJSONResponseSerializer *)manager.responseSerializer; response.removesKeysWithNullValues YES;

顯式(靜態)調用: LIB + DLL + .H

1、編程時用ad.h,ad.lib,放在項目當前目錄里2、在頭文件中加入#include "ad.h"3、在Project Setting–>Link–>Object/library modules加入ad.lib執行時將ad.dll跟你的程序放在同一目錄。 就可以直接調用dll中的函數了 當前目錄 轉載于:https://www.cnblogs.co…

boost Mutex

寫過多線程程序的人都知道&#xff0c;不能讓多個線程同時訪問共享的資源是至關重要的。 假如一個線程試圖改變共享數據的值&#xff0c;而另外一個線程試圖去讀取該共享數據的值&#xff0c;結果將是未定義的。 為了阻止這樣的事情發生&#xff0c;需要用到一些非凡的原始數據…

接入支付寶出現交易訂單處理失敗,請稍后再試(ALI64)的錯誤

上次在接入支付寶的時候就碰到了交易訂單處理失敗&#xff0c;請稍后再試&#xff08;ALI64&#xff09;這樣的錯誤&#xff0c;后來經過排查和總結&#xff0c;一般來講這種問題都是公鑰和私鑰沒有正確配置造成的。支付寶這邊為了保證數據在傳輸時不被篡改&#xff0c;使用了r…

c中session的用法

c中session的用法你知道嗎&#xff1f;下面小編就跟你們詳細介紹下c中session的用法&#xff0c;希望對你們有用。c中session的用法如下&#xff1a;Session的基本屬性&#xff1a;一、屬性1、SessionIDSessionID 屬性返回用戶的會話標識。在創建會話時&#xff0c;服務器會為每…

查看硬件信息

測試機器的硬件信息&#xff1a; 查看CPU信息&#xff08;型號&#xff09; # cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 8 Intel(R) Xeon(R) CPU E5410 2.33GHz (看到有8個邏輯CPU, 也知道了CPU型號) # cat /proc/cpuinfo | grep physical …