View Full Version : Copy Constructor
JalaliMehr
چهارشنبه 06 مرداد 1389, 12:16 عصر
مفهوم Copy Constructor چيه و كاربردش كجاست؟
Class1::Class1(const Class1 & rhs)
Nima_NF
چهارشنبه 06 مرداد 1389, 12:53 عصر
وقتی شما Copy Constructor را پیاده سازی کنید، موارد زیر خودکار آن را فرخوانی می کند:
Class1 A(B); // call Copy Constructor
Class1 B = C; // call Copy Constructor
JalaliMehr
پنج شنبه 07 مرداد 1389, 13:56 عصر
آقا نيما ميشه يه خورده بيشتر توضيح بديد. باز هم ممنون.همين رو مفهومش گير دارم.
Nima_NF
شنبه 09 مرداد 1389, 00:04 صبح
نگاه کنید مواقعی پیش می آید که مثلا شما یک عضو داده ای کلاس دارید مانند اشاره گر که آدرس شما را نگه می دارد، سپس شما بدون پیاده سازی Copy Constructor فقط محتویات را کپی می کنید. چه اتفاقی می افتد؟
در مثال فوق همان اشاره گر (آدرس داده) در کلاس C به اشاره گر مشابه در کلاس B کپی می شود. حال هر دو به یک مکان از حافظه اشاره می کنند.
اکنون، اگر کلاس C این حافظه را بگیرد و delete کند چه اتفاقی می افتد؟
کلاس دوم یعنی B که همان داده ها را کپی کرده بود، چون در اینجا اشاره گر (آدرس مکان) را فقط کپی کرده بود، اشتباها از دسترس خارج می شود و دیگر به جایی اشاره نمی کند!
پس راهکار این هست که شما با دقت، Copy Constructor تعریف کنید به جای اینکه فقظ آدرس ها را کپی کنید خودتان دستی داخل آن محتویات داده های کلاس C را در کلاس B کپی کنید.
دقت کنید این بحث بیشتر یک مفهوم هست، یعنی در کل سازنده ای که محتویات کلاسی را در کلاس دیگر کپی کند.
به مورد تعریف شده فوق می گویند: user defined copy constructor
اما آیا همیشه لازم هست تا شما copy constructor را خودتان تعریف کنید؟
همیشه خیر، در حالت عادی خود کامپایلر Copy Constructor را طبق حالت مرسوم انجام می دهد، اما برای مثال های مشابه فوق، تا شما این جزییات را پیاده سازی نکنید، با اشتباهات مشابه بر خورد می کنید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.