2010-06-14 3 views
1

У меня есть этот фрагмент кода, и я должен написать соответствующий код с классом A (конструктор, деструктор, конструктор копирования, operator =), мой вопрос - мне нужно написать интеллектуальные указатели, если я хочу, чтобы этот код будет работать отлично, если нет, то вы можете объяснить, где пишут умные указатели будут полезны, спасибо заранеевопрос о умных указателях

A *pa1 = new A(a2); 
A const * pa2 = pa1; 
A const * const pa3 = pa2; 
+0

Когда вы говорите «написание умных указателей», вы действительно имеете в виду «* используя * умные указатели»? Вы действительно не думаете о внедрении собственного класса интеллектуальных указателей, не так ли? –

ответ

1

Умный указатель не нужен, так как не могут выполнять операции, следующие за новыми. Вам просто нужно:

A *pa1 = new A(a2); 
A const * pa2 = pa1; 
A const * const pa3 = pa2; 
delete pa1; 

Если это не то, о чем вы просите, уточните свой вопрос.

2

смарт-указатель наиболее полезен, когда трудно предсказать, когда объект должен быть удален. Например: если вы создаете объект в одной точке, и объект может быть удален в другом очень удаленном месте или, что более важно, может быть удален несколькими разными местами, интеллектуальные указатели - лучшее решение. Таким образом, в принципе, если вы не можете точно сказать, когда объект должен быть удален, и он всегда будет безопасным для этого (т. Е. Ни один другой объект не содержит указатель на этот объект), используйте интеллектуальные указатели.

Еще одна точка зрения, которую используют некоторые друзья, заключается в том, что интеллектуальные указатели настолько дешевы (то есть стоимость обработки при их использовании очень мала), умный указатель должен всегда использоваться, когда объекты выделены в куче (т.е. с использованием нового). Таким образом, вам никогда не придется беспокоиться о утечке памяти или двойных разрядах и т. Д.

Смежные вопросы