Это не то, о чем вы должны беспокоиться, это удаление.
С интеллектуальными указателями (тип подсчета ссылок) объектами обычно могут быть несколько других объектов, и когда последняя ссылка выходит за пределы области, объект автоматически удаляется. Таким образом, вам больше не придется вручную удалять что-либо, вы можете только утечка памяти, когда у вас есть круговые зависимости, и ваши объекты никогда не удаляются из-за спины.
Тип единственного владельца (std::auto_ptr
) также освобождает вас от вашей дезинтеграционной обязанности, но он позволяет только одному владельцу одновременно (хотя право собственности может быть передано). Это полезно для объектов, которые вы передаете в качестве указателей, но вы все равно хотите, чтобы они автоматически очищались, когда они выходили из области действия (чтобы они хорошо работали в контейнерах, а разворот стека в случае исключения работает, как ожидалось).
В любом случае, интеллектуальные указатели делают ваше явное владение в вашем коде не только для вас и ваших товарищей по команде, но и для компилятора - неправильное выполнение может привести либо к ошибке компилятора, либо к ошибке времени выполнения, которая относительно легко поймать с защитным кодированием. В ручном коде, управляемом памятью, легко получить ситуацию с владением где-то неправильно (из-за неправильного чтения комментариев или допущения чего-то неправильного пути), а получающаяся ошибка обычно трудно отследить - вы будете утечка памяти, перезапись это не ваше, программа случайно вылетает и т. д .; все они имеют общее, что ситуация, в которой происходит ошибка, не связана с секцией нарушения кода.
Что вы подразумеваете под "a own b"? И как вы сейчас удаляете вещи? – 2010-12-17 12:16:08
У меня есть b, я имею в виду a создает b и разрушает b. – jameszhao00 2010-12-17 12:25:13