пятница, 11 июля 2008 г.

Любимая С++ фича

В своем посте My Favorite C++ Feature автор говорит, что его любимая фича в С++ - деструкторы. Согласен с ним в это на 100%, особенно вызов деструктора при выходе из области видимости. Использовать подобные конструкции мне доставляет прямо таки эстетическое удовольствие:

Это позволяет писать более читабельный код, не используя лишний раз try-catch. И это как раз то, чего мне сейчас не хватает в Python'e. Хотя, там есть деструкторы (__del__), но не факт, что он вызовется в нужный мне момент.

Кроме деструкторов, в С++ я обожаю шаблоны, но практика показывает, что использование шаблонов усложняет код и увеличивает время сборки проекта.

Вообще, тему С++ фич можно расширить - фичи с использованием С++. Здесь я могу назвать два своих самых любимых паттерна - smart pointer (как раз из-за деструкторов) и visitor (за возможность добавления новой функциональности иерархии классов без внесения изменения в их код и за возможность избежать использование dynamic_cast). А какие ваши самы любимые С++ фичи?

7 комментариев:

Анонимный комментирует...

У Python есть сборщик мусора. Вызывать деструктор вручную -- просто тащить привычки C++ в Python.

Шаблоны в C++ неправильные, так как не позволяют расширять сам язык (как в Scheme).

А остальное это просто симптоматическое лечение родовых травм C++.

sash_ko комментирует...

У Python есть сборщик мусора. Вызывать деструктор вручную -- просто тащить привычки C++ в Python.
Речь не идет о вызове деструктора в ручную и не об освобождении памяти. В С++ деструктор может автоматизировать выполнение некоторых операций, в Python'e - нет. Тот же код из примера:

def do_something(ds):
try:
ds.open()
#...
ds.commit()
finally:
ds.close()

Простое удобство и ничего более.

Шаблоны в C++ неправильные, так как не позволяют расширять сам язык (как в Scheme).
Отсутствие способности расширять язык - это не критерий для того, что бы утверждать, что шаблоны неправильные. Существует огромное количество задач, в которых этого от них не требуется. Не обязательно резать хлеб скальпелем, для это сойдет обычный кухонный нож :)

А остальное это просто симптоматическое лечение родовых травм C++.
Хоть это и смахивает на холивар (типа: почему С++ кака), но все же интересно, под 'остальным' и 'родовыми травмами' имеется ввиду что-то конкретное или язык в целом?

Кстати в битве C++ vs Python для моего текущего проекта, последний одержал победу ввиду явного преимущества и это неделе сишная часть (в том числе и guiовая) была успешно заменена.

Unknown комментирует...

И это как раз то, чего мне сейчас не хватает в Python'e

Анонимный комментирует...

Возможно Python-овский with то что нужно? Мне кажется, что его использование гораздо нагляднее, чем C++-сный неявный вызов конструктора объекта транзакции при выходе из scope...

Анонимный комментирует...

О with'e я не знал, надо будет посмотреть, на первый взгляд, как раз то, что надо

sash_ko комментирует...

2AQUAGNU: прочитал про питоновский with - замечательная штука! Спасибо за посказку.

Анонимный комментирует...

И в заключении, поoзвольте отметить: пoомогайте друг другу, обращайтесь, если необходимо, за помощью и ведите себя с другими людьми так, как бы вы хoотели, чтобы другие вели себя по отношению к вам.buy viagra