{"id":208,"date":"2007-01-04T16:23:00","date_gmt":"2007-01-04T07:23:00","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=208"},"modified":"2017-01-31T19:50:04","modified_gmt":"2017-01-31T10:50:04","slug":"ccli%ec%9d%98-dispose-pattern%ec%97%90-%eb%8c%80%ed%95%9c-%ea%b3%a0%ec%b0%b0","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=208","title":{"rendered":"C++\/CLI\uc758 Dispose Pattern\uc5d0 \ub300\ud55c \uace0\ucc30"},"content":{"rendered":"<p>\ub9ac\uc18c\uc2a4 \ud574\uc81c\ub97c \uc704\ud55c .NET \uac1c\ubc1c\ud658\uacbd\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 Dispose \ud328\ud134\uc744 \ud30c\uc545\ud558\uae30 \uc704\ud574 \ud14c\uc2a4\ud2b8\uc6a9\uc73c\ub85c \uc801\uc6a9\ud560 \ud074\ub798\uc2a4 \uc815\uc758\ub294 \ub2e4\uc74c\uacfc \uac19\uc73c\uba70 \ucd1d \uc138\uac00\uc9c0\uc758 \uacbd\uc6b0\ub85c \uc2dc\ud5d8\uc744 \ud574\ubcf4\uc558\ub2e4.<\/p>\n<pre>ref class T : public IDisposable {\r\npublic:\r\n    T() {\r\n        Console::WriteLine(L\"T() invoked\");\r\n    }\r\n\r\n    ~T() {\r\n        Console::WriteLine(L\"~T() invoked\");\r\n    }\r\n\r\n    !T() {\r\n        Console::WriteLine(L\"!T() invoked\");\r\n    }\r\n};<\/pre>\n<p>\uccab\ubc88\uc9f8 \uc2dc\ud5d8 \ucf54\ub4dc\ub294 \ub9c8\uce58 \uc9c0\uc5ed\ubcc0\uc218\ucc98\ub7fc \ud560\ub2f9\ud558\ub294 \uacbd\uc6b0\uc774\ub2e4. \ud558\uc9c0\ub9cc \uc808\ub300 \uc9c0\uc5ed \ubcc0\uc218\uac00 \uc544\ub2c8\ub77c\ub294 \uc810.. CLR Heap\uc5d0 \ud560\ub2f9\ub41c\ub2e4.<\/p>\n<pre>int main(array ^args)\r\n{\r\n    T a;\r\n    return 0;\r\n}\r\n<\/pre>\n<p>\uc2e4\ud589 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4. \uc9c0\uc5ed\ubcc0\uc218\ucc98\ub7fc \ubcc0\uc218\uc758 \uc720\ud6a8 Scope\ub97c \ubc97\uc5b4\ub098\ub294 \uc21c\uac04 \uc18c\uba78\uc790\uac00 \ud638\ucd9c\ub418\uc5c8\ub2e4. \uc2e4\uc81c IL\uc5d0 \uc758\ud574 \uad6c\ud604\ub41c \ub0b4\ubd80 \ud750\ub984\uc740 \uc18c\uba78\uc790 \ud638\ucd9c\uc774 \uc544\ub2c8\ub77c IDisposable::Dispose \ub9e4\uc11c\ub4dc\uc758 \ud638\ucd9c\uc774\ub2e4. \uc989, \uc18c\uba78\uc790\uac00 IDisposable::Dispose\uc758 \uc7ac\uad6c\ud604\uc774\ub2e4. \ub610\ud55c \ub0b4\ubd80\uc801\uc73c\ub85c GC\uc5d0 \uc758\ud574 \ud638\ucd9c\ub418\uc5b4\uc838\uc57c\ud588\uc744 Finalize \ub9e4\uc11c\ub4dc\ub294 \ud638\ucd9c\ub418\uc9c0 \uc54a\uac8c \uc870\uce58\ub41c\ub2e4. C#\uacfc\ub294 \ub2e4\ub974\uac8c Finalize\uac00 \ud638\ucd9c\ub418\uc9c0 \uc54a\ub3c4\ub85d \uc790\ub3d9\ud654\ub418\uc5c8\ub2e4\ub294 \uc810\uc774 \ub9e4\uc6b0 \ud2b9\uc774\ud558\ub2e4.<\/p>\n<pre>T() invoked\r\n~T() invoked<\/code><\/pre>\n<p>\ub450\ubc88\uc9f8 \uc2dc\ud5d8 \ucf54\ub4dc\ub294 C++\uc5d0\uc11c\ub294 \ud3ec\uc778\ud130 \uac1c\ub150\uc73c\ub85c \uc0dd\uac01\ub418\ub294, \uc989 C++\/CLI\ub294 Handle \uac1c\ub150\uc73c\ub85c CLR\uc758 Heap\uc5d0 \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\uc600\uace0 delete\ub97c \ud638\ucd9c\ud558\uc9c0 \uc54a\uc740 \uacbd\uc6b0\uc774\ub2e4.<\/p>\n<pre>int main(array ^args)\r\n{\r\n    T ^a = gcnew T();\r\n    return 0;\r\n}<\/pre>\n<p>\uc2e4\ud589 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4. Finalize\uc5d0 \ud574\ub2f9\ud558\ub294 !T()\uac00 \ud638\ucd9c\ub418\uc5c8\ub2e4\ub294 \uc810\uc5d0 \uc720\uc758\ud558\uc790.<\/p>\n<pre>T() invoked\r\n!T() invoked<\/pre>\n<p>\uc138\ubc88\uc9f8 \uc2dc\ud5d8 \ucf54\ub4dc\ub294 \ub450\ubc88\uc9f8\uc640 \ub2e4\ub974\uac8c delete \uc5f0\uc0b0\uc790\ub97c \uc801\uc6a9\ud574 \uc8fc\uc5c8\ub2e4.<\/p>\n<pre>int main(array ^args)\r\n{\r\n    T ^a = gcnew T();\r\n    delete a;\r\n    return 0;\r\n}\r\n<\/pre>\n<p>\uc2e4\ud589 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4. Finalize\uac00 \uc544\ub2cc Dispose\uac00 \ud638\ucd9c\ub418\uc5c8\ub2e4.<\/p>\n<pre>T() invoked\r\n~T() invoked<\/pre>\n<p>\uc5ec\uae30\uc11c \uc5bb\uc744 \uc218 \uc788\ub294 \uac00\uc7a5 \uc911\uc694\ud55c \ud55c\uac00\uc9c0 \uacb0\ub860\uc740 ~T()\uc5d0 \ud574\ub2f9\ud558\ub294 Dispose()\uc640 !T()\uc5d0 \ud574\ub2f9\ud558\ub294 Finalize()\uc758 \ucf54\ub4dc\ub294 \uc808\ub300\ub85c \uac19\uc774 \ud638\ucd9c\ub418\uc9c0 \uc54a\ub294\ub2e4\ub294 \uc810\uc774\ub2e4. C++\/CLI\uc758 \uc0ac\uc6a9\uc790\uac00 .NET\uc758 \ucc38\uc870\ud615 \ubcc0\uc218\ub97c \uc9c0\uc5ed\ubcc0\uc218\ucc98\ub7fc \uc0ac\uc6a9\ud558\ub4e0\uc9c0, gcnew\uc5d0 \uc758\ud574 \ud560\ub2f9\ud558\uc5ec \uc0ac\uc6a9\ud558\ub4e0\uc9c0.. \ub610\ud55c \uc0ac\uc6a9\ud55c \ud6c4 delete\ub97c \ud588\ub4e0\uc9c0, \ud558\uc9c0 \uc54a\uc558\ub4e0\uc9c0 \uac04\uc5d0 ~T()\uc640 !T() \ub458\uc911\uc5d0 \ud558\ub098\ub294 \ubc18\ub4dc\uc2dc \uc2e4\ud589\ub418\ub2e4\ub294 \uc810\uc774\ub2e4. ~T()\ub294 \uae30\uc874\uc758 C++ \uac1c\ub150\uc73c\ub85c\uc368 \ud638\ucd9c\ub418\uba70 !T()\ub294 .NET\uc758 GC\uc5d0 \uc758\ud574 \ud638\ucd9c\ub41c\ub2e4. \uc989, \ub9ac\uc18c\uc2a4 \ud574\uc81c\ub97c \uc704\ud55c \ucf54\ub4dc\ub294 ~T()\uc640 !T()\uc5d0 \ub611 \uac19\uc774 \uc911\ubcf5\uc801\uc73c\ub85c \uc640\uc57c\ud55c\ub2e4\uace0 \uc0dd\uac01\ud55c\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ub9ac\uc18c\uc2a4 \ud574\uc81c\ub97c \uc704\ud55c .NET \uac1c\ubc1c\ud658\uacbd\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 Dispose \ud328\ud134\uc744 \ud30c\uc545\ud558\uae30 \uc704\ud574 \ud14c\uc2a4\ud2b8\uc6a9\uc73c\ub85c \uc801\uc6a9\ud560 \ud074\ub798\uc2a4 \uc815\uc758\ub294 \ub2e4\uc74c\uacfc \uac19\uc73c\uba70 \ucd1d \uc138\uac00\uc9c0\uc758 \uacbd\uc6b0\ub85c \uc2dc\ud5d8\uc744 \ud574\ubcf4\uc558\ub2e4. ref class T : public IDisposable { public: T() { Console::WriteLine(L&#8221;T() invoked&#8221;); } ~T() { Console::WriteLine(L&#8221;~T() invoked&#8221;); } !T() { Console::WriteLine(L&#8221;!T() invoked&#8221;); } }; \uccab\ubc88\uc9f8 \uc2dc\ud5d8 \ucf54\ub4dc\ub294 \ub9c8\uce58 \uc9c0\uc5ed\ubcc0\uc218\ucc98\ub7fc \ud560\ub2f9\ud558\ub294 \uacbd\uc6b0\uc774\ub2e4. \ud558\uc9c0\ub9cc \uc808\ub300 \uc9c0\uc5ed &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=208\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;C++\/CLI\uc758 Dispose Pattern\uc5d0 \ub300\ud55c \uace0\ucc30&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[117,8],"tags":[],"class_list":["post-208","post","type-post","status-publish","format-standard","hentry","category-cpp","category-programming"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=208"}],"version-history":[{"count":1,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/208\/revisions"}],"predecessor-version":[{"id":3695,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/208\/revisions\/3695"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=208"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}