Есть ли причина явно кодировать конструктор по умолчанию, когда нет других конструкторов?

... это освободит память, в которой был сохранен текст?

No.

Или мне было бы лучше просто объявить это как указатель ...

Нет, вам лучше объявить строку в области, в которой она необходима, и позволить вызвать ее деструктор. Если вы должны освободить память в области, которая все еще существует, вы можете сделать это:

std::string().swap(the_string_to_clear);
14
задан froadie 18 February 2010 в 20:12
поделиться

7 ответов

Пара незначительных моментов, которые вряд ли могут быть причиной того, почему вы увидели это в данном случае.

  • Это дает вам возможность установить точку останова.
  • Вы можете сделать его непубличным

Что касается "на случай, если позже будут добавлены другие конструкторы, и вы забудете, что у вас нет конструктора по умолчанию" - это может быть причиной, я полагаю. Но если будет добавлен конструктор не по умолчанию, то любой код, использующий конструктор по умолчанию, не будет компилироваться, поэтому тот, кто добавит новый конструктор, должен будет добавить определение и для конструктора по умолчанию.

С другой стороны, я не могу придумать никакого особого вреда в определении пустого ctor (хотя теперь, когда я это напечатал, у меня появилось чувство, что кто-то может указать на какой-нибудь уголок C++, где это может укусить вас).

16
ответ дан 1 December 2019 в 09:12
поделиться

Он не играет никакой роли и может быть безопасно удален.

6
ответ дан 1 December 2019 в 09:12
поделиться

Вот что говорит спецификация языка Java:

Если класс не содержит конструкторов, то по умолчанию они не объявляются. объявления конструктора, то по умолчанию конструктор по умолчанию, который не принимает никаких параметров автоматически предоставляется:

  • Если объявляемый класс является первичным классом Object, тогда конструктор по умолчанию имеет пустое тело.
  • В противном случае, конструктор по умолчанию не принимает никаких параметров и просто вызывает конструктор суперкласса без аргументов.

Поэтому конструктор по умолчанию будет создан в любом случае. Нет смысла писать его, если это не нужно.

IMO вы должны делать это только если хотите изменить уровень видимости вашего конструктора, т.е. сделать его приватным или защищенным пакетом

3
ответ дан 1 December 2019 в 09:12
поделиться

Хотя явное добавление конструктора на техническом уровне ничего не дает, для этого есть потенциальные причины. Например, если класс создается через отражение, вы можете поместить некоторую документацию в конструктор по умолчанию, чтобы указать, что он требуется, даже если добавление нового конструктора не вызовет ошибки компиляции.

Другая причина заключается в том, что некоторые стандарты кодирования предпочитают его, чтобы явно указать, что вы думали о том, какой конструктор должен иметь этот класс.

3
ответ дан 1 December 2019 в 09:12
поделиться

Потому что вы верите во второе предложение дзен питона :

Явное лучше, чем неявное.

1
ответ дан 1 December 2019 в 09:12
поделиться

Если все, что вы делаете, это удаляете предмет с определенным идентификатором, GET должен соответствовать вашим целям: http://www.diffen.com/difference/Get_vs_Post

Просто убедитесь, что вы обрабатываете случай, когда кто-то пытается удалить то, что уже удалено

-121--5085950-

Вот основной пример.

Смотрите: http://www.thinkjson.com/group-permissions-in-django/

Прежде всего, скажите, что у вас есть модель под названием Report.

class Report(models.Model):
    name = models.CharField(max_length=100)
    contents = models.TextField(blank=True)
    authorized_groups = models.ManyToManyField('ReportGroup', null=True, blank=True, related_name='report_groups')    
    def __str__(self):
        return self.name

Вы можете создать промежуточную модель для пользовательской модели для обработки групповых разрешений:

class ReportGroup(models.Model):
    name = models.CharField(max_length=100)
    authorized_users = models.ManyToManyField(User, null=True, blank=True, related_name='report_users')
    def __str__(self):
        return self.name

Теперь, когда вы редактируете отчет в Django admin, вы можете назначить групповые разрешения для отчета. Эти группы можно администрировать как группы отчетов в Django admin, позволяя выбрать в одном кадре, кто принадлежит к группе.

-121--5085976-

Исправьте меня, если я не прав (я давно не работал на Java), но разве это не препятствует вызову родительского конструктора? В этом случае рассуждения, очевидно, что родитель собирается сделать что-то автоматически, что вы не хотите произойти в этом классе.

0
ответ дан 1 December 2019 в 09:12
поделиться

Меня учили, что общедоступный конструктор по умолчанию требовался спецификацией java bean-компонента .. Страница википедии http: / /en.wikipedia.org/wiki/Java_Bean также перечисляет это как требование.

С другой стороны, я просмотрел сайт Sun / Oracle и не нашел упоминания о нем. См. http://java.sun.com/developer/onlineTraining/Beans/Beans1/simple-definition.html

0
ответ дан 1 December 2019 в 09:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: