Спецификация языка Java должна дать вам идею:
Прямым суперклассом типа массива является Object.
Каждый тип массива реализует интерфейсы
blockquote>Cloneable
иjava.io.Serializable
.Объект - это экземпляр класса или массив.
blockquote>Таким образом, массивы не являются экземплярами, и поэтому для их создания не требуется конструктор. Вместо этого вы используете выражения для создания массива .
У меня такая же проблема. Я использую совершенно разные цветовые схемы для Visual Studio (темный на светлом для C ++; светлый на темном для C # и VB).
Кажется, это помогает моему мозгу облегчить переключение.
Да, это очень плохо, что многие колледжи и университеты не обучают студентов управлению ресурсами.
RAII поможет вам, если вы будете использовать его постоянно.
Не торопитесь и дважды проверьте свою работу. Как только вы вернетесь в канавку, вы мгновенно разгонитесь.
Проблемы с переключением с одного языка на другой - это нормально. C # кажется достаточно близким к C ++, но на самом деле это не так.
Но имейте в виду, что в «современном» C ++ большую часть времени вы не будете использовать управление памятью. Он будет скрыт от вас, поэтому обычно я не особо много занимаюсь указателями (в худшем случае - интеллектуальными указателями). Но я знаю, как они работают. И вам также следует, возможно, вам нужно немного попрактиковаться, как сказал другой участник, с языком C, чтобы все было правильно.
Но в C ++ есть такие вещи, как шаблоны, функторы, алгоритмы, потоки, над которыми нужно немного подумать, потому что это не java-C #, как вы, возможно, привыкли. И, конечно же, использование стандартной библиотеки шаблонов и, в конечном итоге, повышение.
Но что ж, «хороший» разработчик C ++ должен знать, почему он не использует указатели :)
Составьте контрольный список частых ошибок, которые вы делаете при переключении с одного на другой, и обращайтесь к нему каждый раз. Просто, но эффективно.
Мне все время приходится переходить от программирования SQL на основе Oracle к SQL на основе Sybase.
Что мне помогает, так это наличие той же процедуры, сидящей на моем дополнительном мониторе, со всеми хорошими вещами в ней, простым курсором, настройкой процедуры, операторами «если-то» ... весь допустимый код на этом языке, так что если я Забудьте, какая среда имеет вариант ELSIF или ELSE IF, я могу проверить свой источник шаблона, чтобы узнать.
Я сам с этим столкнулся. Это не просто переход с C# на C++ или с управляемого на неуправляемый. Это происходит при каждом изменении. У меня была эта проблема при переходе с VB на VC++, CC++ на C#, C# на VC++, и даже c# на VB.net (правдивая история - любезность ';').
Отличается только время, затрачиваемое на адаптацию...
Это одна из причин, по которой я гораздо больше работаю в VB.NET, чем в C #. Я не забываю, на каком я языке. Если у вас есть такая возможность, я рекомендую ее. На C # действительно нет ничего такого, чего нельзя было бы сделать в VB.NET, и радикально другой синтаксис помогает мне переключать контекст.
Я делаю это постоянно. Проекты на c++, над которыми я работаю, имеют несколько вещей, облегчающих работу с памятью и ресурсами
a) использование RAII оберток
b) систематическое использование boost shared_ptr
Эти две вещи позволяют программировать на динамически выделяемых вещах (у нас есть хорошо определенные идиомы, которые все знают)
Плюс у нас есть хорошо отлаженная библиотека для выполнения блокировок, потоков и т.д.
Очень помогает
И, конечно, время от времени я жалуюсь на то, что
но - эй - это жизнь
Я чувствую вашу боль; когда я перехожу на c # -> c ++, я пишу код как пьяный.
Я обычно начинаю переключение с чтения нескольких страниц кода, прежде чем погрузиться в работу и начать.
Всякий раз, когда я перехожу с C++ на Java, я все еще думаю о том, где выделяется память. Я нахожу, что проще всего просто не переключаться на представление о памяти как об управляемой... думать о том, куда она направляется, и думать о том, где бы вы ее освобождали, если бы писали на языке без управляемой памяти. И просто не пишите те строки кода, которые вы написали бы в противном случае.
Я делаю простые ошибки, используя указатели и распределение памяти, которые я бы не сделал, когда учился в университете.
Ну, вот в чем ваша проблема. Изучите C++ достаточно хорошо, чтобы понять, как можно не возиться с указателями и выделением памяти в первую очередь.
Тогда переключение между управляемым и неуправляемым кодом станет тривиальным.
Это проблема только для вас, потому что вы переключаетесь между C#, где вам не нужно ни о чем беспокоиться, и C++, который вы не знаете достаточно хорошо, чтобы использовать безопасно.
Управление памятью в C++ не является сложным. Если у вас что-то не получается, то это потому, что вы не изучили его должным образом. В хорошо спроектированном коде C++ это просто не вызывает беспокойства. Оно происходит автоматически, точно так же, как и в C#.