Нет. shared_ptr просто сохранить один дополнительный указатель для подсчета ссылок.
Когда вы копируете объект shared_ptr, он копирует указатель с количеством ссылок, увеличивает его и копирует указатель на содержащийся объект.
Это может сделать код более понятным с первого взгляда. Когда вы используете this
, проще:
Думаю, эта статья немного объясняет это
http://blogs.msdn.microsoft.com/sourceanalysis/archive /2008/05/25/a-difference-of-style.aspx
... блестящий молодой разработчик из Microsoft (хорошо, это был я) решил взять на себя ответственность написать небольшой инструмент, который мог бы обнаруживать отклонения из стиля C #, используемого в его команде. Так родился StyleCop. В течение следующих нескольких лет мы собрали все рекомендации по стилю C #, которые смогли найти в различных командах Microsoft, и выбрали все лучшие практики, которые были общими для этих стилей. Они составили первый набор правил StyleCop. Одним из первых правил, появившихся в результате этих усилий, было использование префикса this для вызова членов класса и удаление любых префиксов подчеркивания из имен полей. Стиль C # официально вырос отдельно от своего старого племени C ++.
Я на самом деле не следую этому руководству, если я не нахожусь в сценариях, которые вам нужны:
this.name = name;
), либо на такие вещи, как Equals
( return this.id == other.id;
) Кроме того, я считаю это беспорядком. Поэтому я отключаю правило.
Обратите внимание, что компилятор не заботится о том, префикс ли вы ссылки с помощью this
или нет (если нет конфликта имен с локальной переменной и полем или вы хотите вызвать метод расширения в текущем экземпляре.)
Это зависит от вашего стиля. Лично я удаляю это.
из кода, поскольку я думаю, что это уменьшает отношение сигнал / шум.
Тот факт, что Microsoft использует этот стиль внутри компании, не означает, что вы должны это делать. StyleCop, похоже, стал общедоступным внутренним инструментом MS. Я полностью за то, чтобы придерживаться соглашений Microsoft по общедоступным вещам, например:
... но то, что происходит в частных сферах вашего кода, в общем, личное. Делайте то, о чем соглашается ваша команда.
Последовательность также важна. Это снижает когнитивную нагрузку при чтении кода, особенно если стиль кода соответствует вашим ожиданиям. Но даже при работе с иностранным стилем кодирования, если он согласован, вам не понадобится много времени, чтобы к нему привыкнуть. Используйте такие инструменты, как ReSharper и StyleCop, чтобы обеспечить согласованность там, где вы считаете это важным.
Использование .NET Reflector предполагает, что Microsoft в любом случае не так хороша в соблюдении стандартов кодирования StyleCop в BCL.
Но даже при работе с иностранным стилем кодирования, если он согласован, вам не понадобится много времени, чтобы к нему привыкнуть. Используйте такие инструменты, как ReSharper и StyleCop, чтобы обеспечить согласованность там, где вы считаете это важным.Использование .NET Reflector предполагает, что Microsoft в любом случае не так хороша в соблюдении стандартов кодирования StyleCop в BCL.
Но даже при работе с иностранным стилем кодирования, если он согласован, вам не понадобится много времени, чтобы к нему привыкнуть. Используйте такие инструменты, как ReSharper и StyleCop, чтобы обеспечить согласованность там, где вы считаете это важным.Использование .NET Reflector предполагает, что Microsoft в любом случае не так хороша в соблюдении стандартов кодирования StyleCop в BCL.
Я слежу за ним, потому что считаю, что действительно удобно иметь возможность с первого взгляда различать доступ к статическим и экземплярам членов.
И, конечно же, я должен использовать его конструкторы, потому что я обычно даю параметрам конструктора те же имена, что и поле, которому присваиваются их значения. Так что мне нужно «это» для доступа к полям.
Кроме того, можно дублировать имена переменных в функции, так что использование «this» может сделать ее более понятной.
class foo {
private string aString;
public void SetString(string aString){
//this.aString refers to the class field
//aString refers to the method parameter
this.aString = aString;
}
}
Я слежу за ним в основном по причинам intellisense . Как приятно печатать это.
и получение подробного списка свойств, методов и т. Д.