{"id":35,"date":"2026-09-14T13:53:29","date_gmt":"2026-09-14T13:53:29","guid":{"rendered":"https:\/\/corpusgame.com\/?p=35"},"modified":"2026-09-14T13:54:34","modified_gmt":"2026-09-14T13:54:34","slug":"lvalue-movesemantics","status":"publish","type":"post","link":"https:\/\/corpusgame.com\/en\/lvalue-movesemantics\/","title":{"rendered":"[C++ Basic] Move Semantics, Lvalue, Rvalue"},"content":{"rendered":"<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">c++\uc744 \uc774\uc6a9\ud574\uc11c \uac1c\ubc1c\uc744 \ud558\ub2e4\ubcf4\uba74 \ubcf5\uc0ac \ub300\uc2e0\uc5d0 \uc774\ub3d9\uc5f0\uc0b0\uc744 \ud1b5\ud574\uc11c \uc5ec\ub7ec \uc774\uc810\uc744 \uc5bb\ub294\ub2e4\ub294 \uc815\ubcf4\ub97c \ud655\uc778\ud560 \uc218 \uc788\ub2e4. \uadf8\ub54c \ud56d\uc0c1 \ub4f1\uc7a5\ud558\ub294 \uac1c\ub150\uc774 \ubc14\ub85c move semanics\uc774\ub2e4. \uadf8\ub807\uae30 \ub54c\ubb38\uc5d0 \uc624\ub298\uc740 \uc774 \uac1c\ub150\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\uace0 \uc774\ub3d9 \uc5f0\uc0b0\uc790\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\ub2e4.<br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lvalue, Rvalue<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>int x = 10;\nint y = 20;\n\nx            \/\/ (\uc774\ub984 \uc788\uc74c, &amp;x \uac00\ub2a5)\n*p           \/\/ (\ud3ec\uc778\ud130\ub97c \uc5ed\ucc38\uc870\ud55c \uacb0\uacfc\ub3c4 lvalue, &amp;(*p) \uac00\ub2a5)\narr&#91;0]       \/\/ (\ubc30\uc5f4 \uc6d0\uc18c\ub3c4 lvalue)\n\n5            \/\/ (\uadf8\ub0e5 \uc22b\uc790, \uc8fc\uc18c\ub97c \ub730 \uc218 \uc5c6\uc74c. &amp;5\ub294 \uc5d0\ub7ec)\nx + y        \/\/ (\ub367\uc148\uc758 \"\uacb0\uacfc\"\ub294 \uc784\uc2dc\uac12, \uc774\ub984\uc774 \uc5c6\uc74c)\nMyString()   \/\/ (\uc0dd\uc131\uc790 \ud638\ucd9c\ub85c \uac13 \ub9cc\ub4e4\uc5b4\uc9c4 \uc784\uc2dc \uac1d\uccb4)\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>lvalue\ub294 \uc774\ub984\uc774 \uc788\uace0 &amp;\ub97c \ubd99\uc77c \uc218 \uc788\ub294\uac70\ub77c\uace0 \ubcf4\uba74 \ub41c\ub2e4.<\/li>\n\n\n\n<li>rvalue\ub294 \uc774\ub984\uc774 \uc5c6\uace0 &amp;\ub97c \ubd99\uc77c \uc218 \uc5c6\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub7f0\ub370 rvalue\uc5d0 \uc774\ub984\uc744 \ubd99\uc774\ub294 \ubc29\ubc95\uc774 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>T&amp;   \u2190 lvalue \ub808\ud37c\ub7f0\uc2a4 (lvalue\ud55c\ud14c\ub9cc \ubd99\uc744 \uc218 \uc788\ub294 \ubcc4\uba85)\nT&amp;&amp;  \u2190 rvalue \ub808\ud37c\ub7f0\uc2a4 (rvalue\ud55c\ud14c\ub9cc \ubd99\uc744 \uc218 \uc788\ub294 \ubcc4\uba85)\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ubc14\ub85c rvalue \ub808\ud37c\ub7f0\uc2a4 (&amp;&amp;)\ub97c \uc0ac\uc6a9\ud558\uba74 \ub41c\ub2e4. \u2192 c++ 11\uc5d0 \uc0dd\uae34 \ubb38\ubc95<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>void f(int&amp; x)        { cout &lt;&lt; \"lvalue \ubc84\uc804\\n\"; }\nvoid f(int&amp;&amp; x)       { cout &lt;&lt; \"rvalue \ubc84\uc804\\n\"; }\n\nint a = 10;\nf(a);         \/\/ \"lvalue \ubc84\uc804\" \u2014 a\ub294 \uc774\ub984 \uc788\ub294 \ubcc0\uc218\ub2c8\uae4c\nf(10);        \/\/ \"rvalue \ubc84\uc804\" \u2014 10\uc740 \uc784\uc2dc\uac12\uc774\ub2c8\uae4c\nf(a + 1);     \/\/ \"rvalue \ubc84\uc804\" \u2014 a+1\uc758 \uacb0\uacfc\ub294 \uc784\uc2dc\uac12\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>f\ub77c\ub294 \ud568\uc218\uc5d0 \ub808\ud37c\ub7f0\uc2a4\uc640 rvalue \ub808\ud37c\ub7f0\uc2a4\ub97c \uc624\ubc84\ub85c\ub529\ud574\ub450\uba74 \uc778\uc790\ub97c \ubcf4\uace0 \uc774\ub984\uc774 \uc788\ub294\uac74\uc9c0, \uace7 \uc0ac\ub77c\uc9c8 \uc560\uc778\uc9c0\ub97c \uc54c\uc544\uc11c \ubcf4\uace0 \uace8\ub77c\uc900\ub2e4.<\/li>\n\n\n\n<li>\uc774 \uc120\ud0dd \ub9e4\ucee4\ub2c8\uc998\uc774 move semantics\ub77c\uace0 \ubd80\ub978\ub2e4.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>class MyString {\n    char* data;\n    size_t size;\npublic:\n    \/\/ \ubcf5\uc0ac \uc0dd\uc131\uc790 \u2014 lvalue\ub97c \ubc1b\uc74c\n    MyString(const MyString&amp; other) {\n        size = other.size;\n        data = new char&#91;size];\n        memcpy(data, other.data, size);   \/\/ \uc9c4\uc9dc\ub85c \uba54\ubaa8\ub9ac\ub97c \ud1b5\uc9f8\ub85c \ubcf5\uc0ac (\ube44\uc6a9 O(n))\n    }\n\n    \/\/ \uc774\ub3d9 \uc0dd\uc131\uc790 \u2014 rvalue\ub9cc \ubc1b\uc74c (T&amp;&amp;)\n    MyString(MyString&amp;&amp; other) noexcept {\n        data = other.data;      \/\/ \ud3ec\uc778\ud130\ub9cc \uc2ac\uca4d \uac00\uc838\uc634 (\ube44\uc6a9 O(1)!)\n        size = other.size;\n        other.data = nullptr;   \/\/ \uc6d0\ubcf8\uc740 \ube44\uc6cc\ub460 (\uc6d0\ubcf8\uc774 \uc18c\uba78\ub420 \ub54c \uc774\uc911 \ud574\uc81c \uc548 \ub098\uac8c)\n        other.size = 0;\n    }\n};\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uc774\ub807\uac8c rvalue\ub97c \ubc1b\ub294 \ub808\ud37c\ub7f0\uc2a4 \ud568\uc218\ub97c \ub9cc\ub4e4\uac8c \ub418\uba74, \uc784\uc2dc\uac12\uc774 \ub4e4\uc5b4\uc624\uac8c \ub410\uc744\ub54c \ubcf5\uc0ac\ub97c \ud558\uc9c0 \uc54a\uace0 \uadf8 other \ub370\uc774\ud130\ub97c \uadf8\ub0e5 \ub123\uc740\ub2e4\uc74c\uc5d0 \ube48\uaecd\ub370\uae30\ub85c \ub9cc\ub4dc\ub294\uac78 \ubcfc \uc218 \uc788\ub2e4.<\/li>\n\n\n\n<li>\uc5ec\uae30\uc11c other.data\ub97c nullptr\ub85c \ubc00\uc5b4\uc8fc\ub294 \uc774\uc720\ub294, this\u2192data\uc640 \uac19\uc740 \uc8fc\uc18c\ub97c \uac00\uc9c0\uae30 \ub54c\ubb38\uc5d0 \ud558\ub098\uc758 \ub370\uc774\ud130\ub97c 2 \uacf3\uc5d0\uc11c \ubcf4\uac8c \ub418\uba74 \ub098\uc911\uc5d0 \ud574\uc81c\ud560\ub54c \ub354\ube14 free \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Move Semantics<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\uadf8\ub7ec\ub2c8\uae4c move\ub77c\ub294\uac70\ub294 \uadf8\ub0e5 \ub370\uc774\ud130\ub97c \uc6d0\ub798 \uac00\ub974\ud0a4\uace0 \uc788\ub358\uc560\ub97c \uac00\ub85c\ucc44\uc11c \uc5f0\uacb0\uc744 \ub04a\uace0 \uc0c8\ub85c\uc6b4 \uac1d\uccb4\uac00 \uadf8 \ub370\uc774\ud130\ub97c \uac00\ub974\ud0a4\uac8c \ud558\ub294 \uac83\uc774\ub2e4. (\uad8c\ud55c\ub9cc \ubc14\uafbc\ub2e4.)<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c \ubb34\uc5b8\uac00\ub97c \uc2e4\uc81c\ub85c \uc62e\uae30\ub294 \uc791\uc5c5\uc740 \ud558\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201c\uc774 \uac12\uc740 \uace7 \ubc84\ub824\uc9c8 \uac70\ub2c8\uae4c, rvalue\ucc98\ub7fc \ucde8\uae09\ud574\ub3c4 \ub3fc\u201d\ub77c\uace0 \ucef4\ud30c\uc77c\ub7ec\uc5d0\uac8c \uc54c\ub824\uc8fc\ub294 \uac83\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class MyString {\n    char* data;\npublic:\n    \/\/ \uc774\ub3d9 \uc0dd\uc131\uc790 \u2014 \uc5ec\uae30\uac00 \"\uc9c4\uc9dc \uc62e\uae30\ub294 \uc791\uc5c5\"\uc774 \uc77c\uc5b4\ub098\ub294 \uacf3\n    MyString(MyString&amp;&amp; other) noexcept : data(other.data) {\n        other.data = nullptr;   \/\/ \uc6d0\ubcf8\uc740 \ube44\uc6cc\ub460 (\uc548 \uadf8\ub7ec\uba74 \ub458\uc774 \uac19\uc740 \uba54\ubaa8\ub9ac\ub97c \uac00\ub9ac\ud0a4\uac8c \ub428)\n    }\n};\n\nMyString a(\"hello\");\nMyString b = std::move(a);\n\/\/ a\ub294 \uc5ec\uc804\ud788 \uc874\uc7ac\ud558\ub294 \ubcc0\uc218\uc9c0\ub9cc, \uc774\uc81c data\uac00 nullptr\uc778 \"\ube48 \uaecd\ub370\uae30\" \uc0c1\ud0dc\n\/\/ b\uac00 \uc6d0\ub798 a\uac00 \uac16\uace0 \uc788\ub358 \uba54\ubaa8\ub9ac\ub97c \uadf8\ub300\ub85c \uac00\uc838\uac10 (\ubcf5\uc0ac \uc5c6\uc74c!)\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uc774\ub807\uac8c \uc774\ub3d9 \uc0dd\uc131\uc790\ub97c \ud1b5\ud574\uc11c \ubcf5\uc0ac \uc5f0\uc0b0\uc5c6\uc774 \ubc14\ub85c b\uc5d0\uac8c \ub118\uaca8\uc8fc\ub294 \ub4ef\ud55c \ub290\ub08c\uc73c\ub85c \uc0ac\uc6a9\ud558\uba74 \ub41c\ub2e4.<\/li>\n\n\n\n<li>\uc5ec\uae30\uc11c a\ub294 \uc0ac\ub77c\uc9c0\uc9c0\uc54a\uace0 \ub0a8\uc544\uc788\ub294\ub2e4(\ube48 \uaecd\ub370\uae30).<\/li>\n\n\n\n<li>\ud558\uc9c0\ub9cc \uc5ec\uae30\uc11c \ubcf4\ub294 \uac83 \ucc98\ub7fc, a\ub294 \uacc4\uc18d\ud574\uc11c \ub0a8\uc544\uc788\uac8c \ub420 \uac83\uc774\ub2e4. \ubb3c\ub860 \uc9c0\uae08\uc740 new\ub85c \ub3d9\uc801\ud560\ub2f9\ud558\uc9c0 \uc54a\uc544\uc11c \uc2a4\ud0dd\uc5d0 \uc874\uc7ac\ud558\uae30 \ub54c\ubb38\uc5d0 \ud074\ub798\uc2a4\uac00 \uc885\ub8cc\ub418\uba74 \uc54c\uc544\uc11c \uc9c0\uc6cc\uc9c8 \uac83\uc774\ub2e4.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>std::unique_ptr&lt;MyString&gt; a = std::make_unique&lt;MyString&gt;(\"hello\");\nstd::unique_ptr&lt;MyString&gt; b = std::move(a);\n\n\/\/ \uc774\uc81c a\ub294 \"\ube48 unique_ptr\" (\ub0b4\ubd80\uc801\uc73c\ub85c nullptr\uc744 \ub4e4\uace0 \uc788\ub294 \uc0c1\ud0dc)\n\/\/ a\uc5d0 \ub300\ud574 delete\ub97c \ub530\ub85c \ud638\ucd9c\ud560 \ud544\uc694\uac00 \uc804\ud600 \uc5c6\uc74c!\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ub9cc\uc57d\uc5d0 \ub3d9\uc801\uc0dd\uc131\uc744 \ud574\uc11c \ud799\uc5d0 \uc788\ub2e4\uace0 \ud558\uba74 \ucc28\ub77c\ub9ac unique_ptr\ucc98\ub7fc \uc2a4\ub9c8\ud2b8 \ud3ec\uc778\ud130\ub97c \uc4f0\ub294\uac83\ub3c4 \ubc29\ubc95\uc774\ub2e4.<\/li>\n\n\n\n<li>\uadf8\ub807\uac8c \ub418\uba74 \uc2a4\ucf54\ud504\ub97c \ubc97\uc5b4\ub0a0 \ub54c \uc54c\uc544\uc11c \ub0b4\ubd80 \uce74\uc6b4\ud305\uc774 \uc5c6\uc73c\uba74 \uc0ad\uc81c\ud560 \uac83\uc774\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f&nbsp;\ucc38\uace0\ub85c move() \ud568\uc218\ub294 \uc18c\uc720\uad8c\uc744 \uc62e\uae30\uac70\ub098 \ubb54\uac00\ub97c \uc62e\uae30\ub294 \uac1c\ub150\uc774 \uc544\ub2c8\ub77c lvalue\ub97c rvalue\ub85c \uc778\uc2dd\ud558\uac8c \ud574\uc8fc\ub294 \uce90\uc2a4\ud305\uc774\ub2e4. \uc774\uac78 \uc0ac\uc6a9\ud574\uc57c \ucef4\ud30c\uc77c\ub7ec\uac00 \ubcf5\uc0ac \uc5f0\uc0b0\uc790\uac00 \uc544\ub2c8\ub77c \uc774\ub3d9 \uc5f0\uc0b0\uc790\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rule of 5<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\uc18c\uba78\uc790\ub97c \uc9c1\uc811 \ub9cc\ub4e4\uc5b4\uc57c \ud560 \uc815\ub3c4\ub85c \uc790\uc6d0\uc744 \uc218\ub3d9 \uad00\ub9ac\ud558\ub294 \ud074\ub798\uc2a4\uba74, \uc544\ub798 5\uac00\uc9c0\ub97c \uc138\ud2b8\ub85c \uace0\ub824\ud574\uc57c \ud55c\ub2e4\ub294 \uc6d0\uce59\uc774\ub2e4.<\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uc18c\uba78\uc790<\/li>\n\n\n\n<li>\ubcf5\uc0ac \uc0dd\uc131\uc790, \ubcf5\uc0ac \ub300\uc785 \uc5f0\uc0b0\uc790<\/li>\n\n\n\n<li>\uc774\ub3d9 \uc0dd\uc131\uc790, \uc774\ub3d9 \ub300\uc785 \uc5f0\uc0b0\uc790<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>class MyString {\n    char* data;\n    size_t size;\npublic:\n    MyString(const char* str) { \/* ... *\/ }\n    ~MyString() { delete&#91;] data; }\n\n    \/\/ \ubcf5\uc0ac \uc0dd\uc131\uc790\n    MyString(const MyString&amp; other) {\n        size = other.size;\n        data = new char&#91;size];\n        memcpy(data, other.data, size);\n    }\n    \/\/ \uc774\ub3d9 \uc0dd\uc131\uc790\n    MyString(MyString&amp;&amp; other) noexcept\n        : data(other.data), size(other.size) {\n        other.data = nullptr;\n        other.size = 0;\n    }\n\n    \/\/ \ubcf5\uc0ac \ub300\uc785 \uc5f0\uc0b0\uc790\n    MyString&amp; operator=(const MyString&amp; other) {\n        if (this != &amp;other) {                 \/\/ \uc790\uae30 \uc790\uc2e0\uc5d0\uac8c \ub300\uc785\ud558\ub294 \uacbd\uc6b0 \ubc29\uc9c0\n            delete&#91;] data;                     \/\/ \uae30\uc874 \uc790\uc6d0\ubd80\ud130 \uc815\ub9ac\n            size = other.size;\n            data = new char&#91;size];\n            memcpy(data, other.data, size);\n        }\n        return *this;\n    }\n    \/\/ \uc774\ub3d9 \ub300\uc785 \uc5f0\uc0b0\uc790\n    MyString&amp; operator=(MyString&amp;&amp; other) noexcept {\n        if (this != &amp;other) {\n            delete&#91;] data;                     \/\/ \uae30\uc874 \uc790\uc6d0\ubd80\ud130 \uc815\ub9ac! (\uc5ec\uae30 \uc78a\uc73c\uba74 \ub204\uc218)\n            data = other.data;\n            size = other.size;\n            other.data = nullptr;\n            other.size = 0;\n        }\n        return *this;\n    }\n};\n<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>\uaddc\uce59 A<\/strong>: \uc18c\uba78\uc790, \ubcf5\uc0ac \uc0dd\uc131\uc790, \ubcf5\uc0ac \ub300\uc785 \uc5f0\uc0b0\uc790 \uc911 <strong>\ud558\ub098\ub77c\ub3c4 \uc9c1\uc811 \uc815\uc758<\/strong>\ud558\uba74, \ucef4\ud30c\uc77c\ub7ec\ub294 \uc774\ub3d9 \uc0dd\uc131\uc790\/\uc774\ub3d9 \ub300\uc785 \uc5f0\uc0b0\uc790\ub97c <strong>\uc790\ub3d9\uc73c\ub85c \uc548 \ub9cc\ub4e4\uc5b4\uc90d\ub2c8\ub2e4.<\/strong> (\uc5d0\ub7ec\ub294 \uc548 \ub098\uc694. \uadf8\ub0e5 \uc870\uc6a9\ud788 &#8220;\uc774\ub3d9&#8221; \uae30\ub2a5\uc774 \uc5c6\ub294 \ud074\ub798\uc2a4\uac00 \ub418\uace0, <code>std::move<\/code>\ub97c \uc368\ub3c4 \uadf8\ub0e5 \ubcf5\uc0ac\ub85c \ucc98\ub9ac\ub3fc\uc694.)<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>\uaddc\uce59 B<\/strong>: \uc774\ub3d9 \uc0dd\uc131\uc790\ub098 \uc774\ub3d9 \ub300\uc785 \uc5f0\uc0b0\uc790 \uc911 <strong>\ud558\ub098\ub77c\ub3c4 \uc9c1\uc811 \uc815\uc758<\/strong>\ud558\uba74, \ucef4\ud30c\uc77c\ub7ec\ub294 \ubcf5\uc0ac \uc0dd\uc131\uc790\/\ubcf5\uc0ac \ub300\uc785 \uc5f0\uc0b0\uc790\ub97c <strong>\uc554\ubb35\uc801\uc73c\ub85c \uc0ad\uc81c(deleted)\ud574\ubc84\ub9bd\ub2c8\ub2e4.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uadf8\ub798\uc11c \ub9cc\uc57d\uc5d0 \uc6b0\ub9ac\uac00 \uc9c1\uc811 \ub300\uc785\uc5f0\uc0b0\uc790\ub97c \ub9cc\ub4dc\ub824\uace0 \ud558\uba74 \uc774\ub3d9 \uad00\ub828\ub41c \uc560\ub4e4\uc774 \uc790\ub3d9 \uc0dd\uc131\uc774 \uc548\ub418\uace0, \uc774\ub3d9 \uad00\ub828 \uc5f0\uc0b0\uc744 \ub9cc\ub4e4\uba74 \ub300\uc785 \uc774\ub7f0\uac83\ub4e4\uc774 \uc548\uc0dd\uae34\ub2e4\uace0 \ubcf4\uba74 \ub41c\ub2e4.<\/li>\n\n\n\n<li>\uadf8\ub798\uc11c \uc2e0\uae30\ud558\uac8c\ub3c4 \uac1c\ubc1c\uc790\uac00 5\uac1c\ub97c \ub2e4 \uc815\uc758\ud558\ub294 \uacbd\uc6b0\uac00 \uc544\ub2c8\ub77c\uba74 \ucef4\ud30c\uc77c\ub7ec\uac00 \uc790\ub3d9\uc73c\ub85c \uc0dd\uc131\ud558\ub294 \ubc29\ubc95\uc73c\ub85c\ub294 \uc774\ub3d9 \uad00\ub828\ub41c \uc560\ub4e4\uc774\ub791 \uae30\ubcf8 \ub300\uc785, \ubcf5\uc0ac\ub791 \uacf5\uc874\ud558\uc9c0 \uc54a\ub294\ub2e4.<\/li>\n\n\n\n<li>\ud639\uc740 \uc18c\uba78\uc790\ub3c4 \uac1c\ubc1c\uc790\uac00 \uc544\uc608 \ub9cc\ub4e4\uc9c0 \uc54a\uc73c\uba74 \uae30\ubcf8\uc73c\ub85c 5\uac1c\ub97c \ub2e4 \ub9cc\ub4e4\uc5b4\uc8fc\uae34\ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f&nbsp;\uadf8\ub9ac\uace0 \ud568\uc218\uc758 \ub9ac\ud134\ubb38\uc5d0\ub294 move \uc5f0\uc0b0\uc744 \uc4f0\uba74 \uc548\ub41c\ub2e4. (\uc624\ub958\uac00 \ub098\ub294\uac70\ub294 \uc544\ub2cc\ub370 RVO\ub77c\uace0 \ucd5c\uc801\ud654 \ud558\ub294 \uae30\ub2a5\uc744 \ubabb\uc368\uc11c \uc624\ud788\ub824 \uc190\ud574\ub97c \ubcf8\ub2e4)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MyString(MyString&amp;&amp; other) noexcept { ... }   \/\/ \"\ub098\ub294 \uc808\ub300 \uc2e4\ud328 \uc548 \ud574!\" \uc57d\uc18d \u2192 vector\uac00 \uc774\ub3d9\uc744 \uc500\nMyString(MyString&amp;&amp; other) { ... }            \/\/ noexcept \uc5c6\uc74c \u2192 vector\uac00 \ubabb \ubbff\uace0 \ubcf5\uc0ac\ub97c \uc500 (\uc774\ub3d9 \uc0dd\uc131\uc790\ub97c \ub9cc\ub4e4\uc5b4\ub1a8\ub294\ub370\ub3c4!)\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>noexcept\ub97c \uc0ac\uc6a9\ud558\uba74 \uc608\uc678\ub97c \uc548\ud560\uaebc\ub2c8\uae4c vector\ub098 \uadf8\ub7f0\uc560\ub4e4\ud55c\ud14c \u201c\ubcf5\uc0ac\u201d\ud574\uc11c \uac12\uc744 \uc62e\uae30\uc9c0 \ub9d0\uace0, \u201c\uc774\ub3d9\u201d\ud574\uc11c \ucc98\ub9ac\ud558\ub77c\uace0 \ud558\ub294 \uac83\uc774\ub2e4. \uadf8\ub7ec\ub2c8\uae4c \uc131\ub2a5\uc774 \uc880 \uc88b\uc544\uc9d0.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Rule of 0<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\uc560\ucd08\uc5d0 raw \ud3ec\uc778\ud130\ub97c \uc9c1\uc811 \ub4e4\uace0\uc788\uc9c0 \ub9d0\uace0, unique_ptr, vector\ucc98\ub7fc \uc774\ubbf8 RAII\uac00 \uc801\uc6a9\ub41c \ud0c0\uc785\uc744 \uba64\ubc84\ub85c \uc4f0\uba74, 5\uac1c \ud568\uc218 \uc911 \uc544\ubb34\uac83\ub3c4 \uc4f0\uc9c0 \uc54a\uc544\ub3c4 \ucef4\ud30c\uc77c\ub7ec\uac00 \uc790\ub3d9\uc73c\ub85c \ub9cc\ub4e4\uc5b4\uc900\ub2e4\ub294 \uac1c\ub150\uc774\ub2e4. (\uac00\uc7a5 \uc2e4\uc804\uc801\uc778 \ubaa9\ud45c)<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Forward<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">move()\uac00 \ubb34\uc870\uac74 rvalue\ub85c \ubc14\uafb8\ub294 \uce90\uc2a4\ud305\uc774\uc600\ub2e4\uba74, forward\ub294 \uc6d0\ub798 \ubb50\uc600\ub294\uc9c0 \uae30\uc5b5\ud588\ub2e4\uac00 \uadf8\ub300\ub85c \uc7ac\ud604\ud574\uc8fc\ub294 \uc870\uac74\ubd80 \uce90\uc2a4\ud305\uc774\ub2e4.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>void process(const std::string&amp; s) { std::cout &lt;&lt; \"\ubcf5\uc0ac \ubc84\uc804\\n\"; }\nvoid process(std::string&amp;&amp; s)      { std::cout &lt;&lt; \"\uc774\ub3d9 \ubc84\uc804\\n\"; }\n\ntemplate &lt;typename T&gt;\nvoid relay(T&amp;&amp; arg) {\n    process(arg);   \/\/ \ubb38\uc81c: arg\ub294 \"\uc774\ub984\uc774 \uc788\ub294 \ubcc0\uc218\"\ub77c\uc11c \ud56d\uc0c1 lvalue\ub85c \ucde8\uae09\ub428\n}\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>arg\uc790\uccb4\ub294 \uc774\ub984\uc774 \uc788\ub294 \ubcc0\uc218\uae30 \ub54c\ubb38\uc5d0 process\ub97c \ud638\ucd9c\ud558\uba74 \ud56d\uc0c1 \ubcf5\uc0ac\ubc84\uc804\ub9cc \ubd88\ub9ac\uac8c \ub41c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>template &lt;typename T&gt;\nvoid relay(T&amp;&amp; arg) {\n    process(std::forward&lt;T&gt;(arg));\n}\n\nstd::string s = \"hi\";\nrelay(s);              \/\/ lvalue \uc804\ub2ec \u2192 \"\ubcf5\uc0ac \ubc84\uc804\"\nrelay(std::move(s));   \/\/ rvalue \uc804\ub2ec \u2192 \"\uc774\ub3d9 \ubc84\uc804\" (\uc774\uc81c \uc81c\ub300\ub85c \uc804\ub2ec\ub428!)\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uc774\uac78 \ud574\uacb0\ud558\uae30 \uc704\ud574 forward\ub97c \uc0ac\uc6a9\ud558\uac8c \ub41c\ub2e4.<\/li>\n\n\n\n<li>\ud15c\ud50c\ub9bf\uc744 \uc774\uc6a9\ud574\uc11c \ud0c0\uc785\uc744 \ucd94\ub860\ud558\uac8c \ub41c\ub2e4. forward\ub294 \uc774 T\ub97c \ubcf4\uace0 \ud310\ub2e8\ud558\uac8c \ub41c\ub2e4. \uadf8\ub798\uc11c \ucc38\uc870\ud0c0\uc785(&amp;)\uc774\uba74 Ivalue\uad6c\ub098! \ub77c\uace0 \uc778\uc2dd\ud558\uace0 \ucc38\uc870\uac00 \uc544\ub2c8\ub77c\uba74 \uc6d0\ub798 rvalue\uad6c\ub098! \ub77c\uace0 \uc778\uc2dd\ud558\uac8c \ub41c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Copy Elision(\ubcf5\uc0ac \uc0dd\ub7b5)<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ubcf5\uc0ac \uc0dd\ub7b5\uc740 \ub9ac\ud134\ud560\ub54c \ubcf5\uc0ac\ub97c \uc0dd\ub7b5\ud574 \ucd5c\uc801\ud654\ud55c\ub2e4\ub294 \uc758\ubbf8\uc778\ub370 \ub300\ud45c\uc801\uc73c\ub85c RVO, NRVO\uac00 \uc874\uc7ac\ud55c\ub2e4.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>class Trace {\npublic:\n    Trace() { std::cout &lt;&lt; \"\uae30\ubcf8 \uc0dd\uc131\uc790\\n\"; }\n    Trace(const Trace&amp;) { std::cout &lt;&lt; \"\ubcf5\uc0ac \uc0dd\uc131\uc790\\n\"; }\n    Trace(Trace&amp;&amp;) noexcept { std::cout &lt;&lt; \"\uc774\ub3d9 \uc0dd\uc131\uc790\\n\"; }\n};\n\nTrace createRVO() {\n    return Trace();   \/\/ \uc784\uc2dc \uac1d\uccb4\ub97c \ub9cc\ub4e4\uc5b4\uc11c \ubc18\ud658\n}\n\nint main() {\n    Trace a = createRVO();\n}\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uc774 \ucf54\ub4dc\ub97c \ubcf4\uba74 createRVO\uc5d0\uc11c Trace\ub77c\ub294 \uc784\uc2dc \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\ub2c8\uae4c \uc774\uac8c main\uc73c\ub85c \uc804\ub2ec\uc774 \ub418\uae30 \uc704\ud574\uc11c\ub294 \uc5b4\ub518\uac00\uc5d0 \uc800\uc7a5\uc774 \ub418\uc5b4\uc57c \ud55c\ub2e4. \uadf8\ub798\uc11c rvalue\ub85c \ubcf5\uc0ac\ub4e0 \uc774\ub3d9\uc774\ub4e0 \uc77c\uc5b4\ub0a0\uac83 \uac19\uc9c0\ub9cc \uc2e4\uc81c\ub85c\ub294 \uae30\ubcf8 \uc0dd\uc131\uc790\ub9cc \ud638\ucd9c\uc774 \ub41c\ub2e4.<\/li>\n\n\n\n<li>\ud558\uc9c0\ub9cc \uc2e4\uc81c\ub85c\ub294 \ucef4\ud30c\uc77c\ub7ec\uac00 \u201c\ubb50\ud558\ub7ec \uc911\uac04\uc5d0 \uc784\uc2dc\ub85c \ub9cc\ub4e4\uc5c8\ub2e4\uac00 \uc62e\uae30\uace0 \ub610 \uc62e\uaca8?\u201d\ub77c\uace0 \uc0dd\uac01\ud558\uace0 \ud568\uc218 \ub0b4\ubd80\uc5d0\uc11c Trace()\ub97c \ub9cc\ub4e4\uba74\uc11c \uc774\ubbf8 \uadf8 \uc704\uce58\uc5d0 a\ub97c \ub450\ub294 \ubc29\uc2dd\uc73c\ub85c \ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">RVO(Return Value Optimization)<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ubc18\ud658\ud558\ub294\uac8c \uc774\ub984\uc774 \uc5c6\ub294 \ubcc0\uc218<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\uc989, \uc704\uc758 \ubcf5\uc0ac \uc0dd\ub7b5 \ucf54\ub4dc\ub97c \ubcf4\uba74 return\uc744 \uc5b4\ucc28\ud53c Trace()\ub9cc \ud558\ub2c8\uae4c \ubb34\uc870\uac74 \uc774 \uac1d\uccb4\uc778\uac70\ub97c \uc54c\uae30 \ub54c\ubb38\uc5d0 RVO\uc774\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">NRVO(Named RVO)<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ubc18\ud658\ud558\ub294\uac8c \uc774\ub984\uc774 \uc788\ub294 \ubcc0\uc218<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>Trace createSomething(bool flag) {\n    Trace t1;\n    Trace t2;\n    if (flag) return t1;\n    return t2;\n}\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uc27d\uac8c \ub9d0\ud558\uba74 t1,t2\ucc98\ub7fc \uc774\ub984\uc774 \ubd99\uc740 \uc9c0\uc5ed\ubcc0\uc218\ub97c \ubc18\ud658\ud558\uae30 \ub54c\ubb38\uc5d0 \uc774\ub294 NRVO\uac00 \ub418\ub294 \uac83\uc774\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>","protected":false},"excerpt":{"rendered":"<p>\uc11c\ub860 c++\uc744 \uc774\uc6a9\ud574\uc11c \uac1c\ubc1c\uc744 \ud558\ub2e4\ubcf4\uba74 \ubcf5\uc0ac \ub300\uc2e0\uc5d0 \uc774\ub3d9\uc5f0\uc0b0\uc744 \ud1b5\ud574\uc11c \uc5ec\ub7ec \uc774\uc810\uc744 \uc5bb\ub294\ub2e4\ub294 \uc815\ubcf4\ub97c \ud655\uc778\ud560 \uc218 \uc788\ub2e4. \uadf8\ub54c \ud56d\uc0c1 \ub4f1\uc7a5\ud558\ub294 \uac1c\ub150\uc774 \ubc14\ub85c move semanics\uc774\ub2e4. \uadf8\ub807\uae30 \ub54c\ubb38\uc5d0 \uc624\ub298\uc740 \uc774 \uac1c\ub150\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\uace0 \uc774\ub3d9 \uc5f0\uc0b0\uc790\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\ub2e4. Lvalue, Rvalue \uadf8\ub7f0\ub370 rvalue\uc5d0 \uc774\ub984\uc744 \ubd99\uc774\ub294 \ubc29\ubc95\uc774 \uc788\ub2e4. Move Semantics \uadf8\ub7ec\ub2c8\uae4c move\ub77c\ub294\uac70\ub294 \uadf8\ub0e5 \ub370\uc774\ud130\ub97c \uc6d0\ub798 \uac00\ub974\ud0a4\uace0 \uc788\ub358\uc560\ub97c \uac00\ub85c\ucc44\uc11c \uc5f0\uacb0\uc744 \ub04a\uace0 &#8230; <a title=\"[C++ Basic] Move Semantics, Lvalue, Rvalue\" class=\"read-more\" href=\"https:\/\/corpusgame.com\/en\/lvalue-movesemantics\/\" aria-label=\"More on [C++ Basic] Move Semantics, Lvalue, Rvalue\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":17,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[14,13,15],"class_list":["post-35","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cpp-basic-guide","tag-lvalue","tag-move-semantics","tag-rvalue"],"_links":{"self":[{"href":"https:\/\/corpusgame.com\/en\/wp-json\/wp\/v2\/posts\/35","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/corpusgame.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/corpusgame.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/corpusgame.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/corpusgame.com\/en\/wp-json\/wp\/v2\/comments?post=35"}],"version-history":[{"count":1,"href":"https:\/\/corpusgame.com\/en\/wp-json\/wp\/v2\/posts\/35\/revisions"}],"predecessor-version":[{"id":36,"href":"https:\/\/corpusgame.com\/en\/wp-json\/wp\/v2\/posts\/35\/revisions\/36"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/corpusgame.com\/en\/wp-json\/wp\/v2\/media\/17"}],"wp:attachment":[{"href":"https:\/\/corpusgame.com\/en\/wp-json\/wp\/v2\/media?parent=35"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/corpusgame.com\/en\/wp-json\/wp\/v2\/categories?post=35"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/corpusgame.com\/en\/wp-json\/wp\/v2\/tags?post=35"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}