بستگی به پیادهسازی عملگر =
داره. اگه بعد از انتساب آدرس Rvalue
و Lvalue
یکی هست (یعنی انتساب آدرس رو منتقل میکنه) دیگه نیازی به آزاد کردن حافظه نیست چون اون حافظه الان در اختیار C1
هست و هر زمان که لازم شد میشه حذفش کرد.
اما اگه در عملگر انتساب آدرس منتقل نمیشه بلکه محتویات منتقل میشه، خوب میشه در همون عملگر آزادسازی حافظه رو انجام داد که این یه مشکل داره. ممکنه این عملگر با آدرسی فراخوانی بشه که از یه تابع نیومده بلکه از یک شی گرفته شده که نباید حذف بشه
C C1, C2;
C1 = C2;
بنابراین این راه خوبی نباید باشه در صورتی که اگه یه برنامهی کوچک دارین و قابل کنترل هست این راه قابل اعمال هست.
راه دیگه پیادهسازی انتساب به صورت زیر هست
const C* operator=(const C&);
و بعد استفاده از انتساب به این صورت
C C1, *tmp;
tmp = f();
C1 = *tmp;
delete tmp;
هیچ پژوهش انسانی نمیتواند ادعای علمی بودن داشته باشد، مگر اینکه از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)