delete[] arr, temp;
operator , ()
, поведение которого по умолчанию возвращает только правый операнд.arr
. Разбей эту строку на две, в каждой из которых удаляй конкретный массив.void pushBack(T value)
value
.elements_memory
или memory_block
(Второе менее предпочтительно, но тоже понятно. Первое будет понятно очень хорошо); емкость блока памяти - memory_capacity
или capacity
; длина вектора - elements_count
или length
или size
(последнее менее всего предпочтительно, но канонично относительно реализации вектора); закон роста емкости и закон аллокации элементов.std::allocator
. Закон роста емкости обычно вписывают прямо в реализацию как функцию роста емкости.reserve
(только рост, емкость не уменьшается); изменение длины - resize
(длину можно и уменьшать); очистка - clear
и вставка в конец - push_back
.void pushBack(T value)
нужно просто переписать, в текущем коде ломается целостность состояния вектора. Именно поэтому у тебя вектор не работает со строками. Текущий код выполняет buffer overrun прямо на ровном месте потому что ты сперва сделал length++;
, а потом уже clon();
, в котором цикл вышел за пределы памяти arr
.T& operator[](int i)
try
, а потом еще и в catch
.std::modf
[?] чтобы разбить число на составные части. Каждая составная часть для тебя будет буквой слова при сравнении.statement, indirect - это как раз те англицизмы, переведя которые на русский одним словом, только ухудшит понимание, поэтому я бы не стал это делать
естественно может, просто предпочитаю в ооп-стиле писать )
class Example
{
private:
ExtremelyHeavyObject obj;
public:
Example()
: obj{ ExtremelyHeavyObjectBuilder{}
.method1()
.method2()
.method3()
.build() }
{
}
};
Класс A использует regex и, чтобы написать тест на него и не ctrl + c / ctrl + v regex можно просто доступиться до публичного regex'а класса A в тесте
Для чего тебе потребовалось описанное в вопросе поведение?
WorldSettings
и ConnectionSettings
, в которых и разместить настройки для World
и Connection
.ну и даже с приватными статическими константами хотелоь бы, чтобы на каждый тип шаблона копии переменных не создавались, то есть тут уже речь не идёт о красоте синтаксиса
добавляя "фиктивные" шаблонные параметры как-то слишком костыльно
MEMBER_TO_BE_ACCESSIBLE_OUTSIDE
будет принадлежать только пространству инстанцированного типа. Иными словами, для каждой уникальной комбинации аргументов шаблона MEMBER_TO_BE_ACCESSIBLE_OUTSIDE
будет иметь свой уникальный адрес размещения.само наличие блоков try/catch, насколько мне известно, немного замедляет приложение
Извиняюсь за глупый вопрос, но откуда у пользователя возьмётся корректный стек вызовов?
если приложение чисто серверное, то бояться декомпиляции не стоит?
на практике в релизных сборках устанавливают ли колбэки на системные исключения, вроде сегфолта, с последующим выводом стека вызовов?
хотел переводить
inline
.inline
или static
. Иначе попытка трансляции кода выявит нарушение ODR. Инстанцирование шаблона функции или метода будет помечено как взятое оттуда, где оно определено.static
[?] дает пометку внутреннего связывания для сущности. Константа или переменная в этом случае будет доступна только из того модуля трансляции, который ей пользуется. Статическая глобальная функция помечается как недоступная для связывания в других модулях трансляции. Статический метод будет все так же иметь внешнее связывание, в чем есть свои проблемы.inline
[?] дает пометку слабого внешнего связывания для любой сущности. Что константа или глобальная переменная, что функция или метод (даже статический), помечаются как сущности с внешним связыванием, которое не нарушает ODR в случае если все определения цели связывания во всех модулях трансляции являются полностью одинаковыми. Если хоть одно определение цели связывания отличается - будет нарушение ODR.inline
.
П3.8 регламента запрещает публикацию текста в изображениях. Многие люди, как и я, просто отказываются вчитываться в том мыло, которое ты опубликовал. Лично мне мои глаза дороже ответа тебе.
Поведение в нарушение правил бросает обществу вызов, поэтому такое поведение и называется вызывающим. Я просто советую тебе не заниматься этим.
Окно вывода ошибок не всегда является информативным. В твоем случае куда более информативным будет являться лог сборки проекта. И там, в твоей ситуации, действительно больше написано чем ты показываешь. Я от тебя ожидал ошибки именно из лога сборки.
По коду твоего шаблона. Если его суть действительно в удалении копий переданного значения, то тебе не нужен третий параметр в сигнатуре функции. Вместо этого тебе нужно возвращать итератор нового окончания диапазона.
В функцию ты передаешь диапазон в виде двух итераторов. В теле функции ты заводишь еще один локальный итератор от начала диапазона. В цикле по элементам диапазона: если нашелся дубликат - просто переходим к следующему элементу; если локальный итератор и итератор текущего элемента одинаковы - двигаем локальный итератор дальше; иначе перемещаем значение текущего элемента в позицию локального итератора и двигаем локальный итератор дальше. В конце функции возвращаем значение локального итератора как значение нового конца диапазона.
В момент обнаружения дубликата позиция локального итератора и текущего элемента диапазона разбегутся, а в конце цикла дистанция разбежки между локальным итератором и концом диапазона будет означать количество обнаруженных дубликатов.