Здравствуйте, T4r4sB, Вы писали:
TB>Нахрена ты вообще туда new впендюрил, если тебе достаточно вернуть объект по значению?
Потому что программист на си шарп напишет программу на си шарп на любом языке программирования.
P.S. В си шарп нет возможности выбирать способ возврата из функций. Каким образом будет возвращаться тот или иной объект раз и навсегда прошито в типе объекта. Все типы делятся на две категории — ссылочные типы (reference types) и типы-значения (value types). В общем, там много всяких памперсов напридумано. Только очень часто случается, что эти памперсы не могут покрыть всю жопу и тогда появляются разного рода костыли: боксинг, in/out/ref параметры, nullable типы, недо-шаблоны, недо-деструкторы, недо-RAII и прочее уродство. В общем, "язык приятный во всех отношениях".
Здравствуйте, T4r4sB, Вы писали:
S>>Утечку памяти воткнул случайно, т.к. еще не отработал привычку очистки. TB>Нахрена ты вообще туда new впендюрил, если тебе достаточно вернуть объект по значению?
Задумка была — проиллюстрировать проблему присвоения стековой памяти и использовать его после удаления ее из стека.
Здравствуйте, Shmj, Вы писали:
TB>>Нахрена ты вообще туда new впендюрил, если тебе достаточно вернуть объект по значению?
S>Задумка была — проиллюстрировать проблему присвоения стековой памяти и использовать его после удаления ее из стека.
Это как-то отвечает на вопрос: "Нахрена ты вообще туда new впендюрил"?
Здравствуйте, Shmj, Вы писали:
S>Задумка была — проиллюстрировать проблему присвоения стековой памяти и использовать его после удаления ее из стека.
Тогда почему ты не удосужился вычистить лишнее из примера? Этот вопрос не относится к знанию того или иного языка. Это общая инженерная культура, блин! Где твоя грёбаная культура нахрен?!
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
что такое санитайзер и что он на это может, знает каждый в топике, кроме вас
а с вас смеются потому что вы пиявка
паразитируете на других только бы самому не разбираться
у вас проблемы в само обучением и денег нет даже на ютуб репетитора-учителя ?
но вы не ответили на самый главный вопрос топика >а что в С# настолько все плохо и нет работы, что шарписты набежали в тему С++ ?
Здравствуйте, Shmj, Вы писали:
PM>>Запускаем CI c разными вариантами sanitizers которые встроены в GCC и Clang
S>Вот ради этого и стоило создать пост, пусть и подвергнувшись многочисленному высмеиванию. sanitizers, теперь буду знать что это существует.
В мире C++ много чего существует, и сеньоры на вашем проекте должны бы по-хорошему про это знать. Если самый опытный там — это вы, то есть куча вещей, которые придется изучить. Они уже собраны в списки типа "awesome c++", "modern c++ best practices"
Для проектов есть шаблоны, где уже подобраны средства для сборки, тестов, управления зависимостями, автоформатирования кода, статических анализаторов, санитайзеров, и прочих инструментов, используемых при разработке на C++
Здравствуйте, Shmj, Вы писали:
S>Вот ради этого и стоило создать пост, пусть и подвергнувшись многочисленному высмеиванию. sanitizers, теперь буду знать что это существует.
Не только ради этого. Переснать использовать это гребаное new! Кресты это не шарпик. Оператор new устарел в том смысле в котором ты им пользуешься. И аллокация в куче у тебя тут нахрен не нужна
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Здравствуйте, Shmj, Вы писали:
>>>а что в С# настолько все плохо и нет работы, что шарписты набежали в тему С++ ?
S>Я, пока был в горячей точке под бомбами, — начал думать о состоянии IT глобально. Все равно электричества не было и делать было нечего. S> ... S>Проанализировал все это и понял что от С++ все-равно никуда не уйти.
Ход мысли и вывод так себе, но это не так важно.
Важно то, что для вменяемого человека, пришедшего к такому выводу, следующим логичным шагом будет взять и почитать книги, а не браться за работу на С++ и заваливать форумы спамом.
Здравствуйте, so5team, Вы писали:
S>Здравствуйте, T4r4sB, Вы писали:
TB>>мусор типа оператора new, кстати нахрена он нужен после 11 года?
S>Если не брать в рассмотрение placement new, то разве что для создания объектов с private/protected конструкторами.
Мне казалось что для этого используются статик методы, создающие объект
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Здравствуйте, T4r4sB, Вы писали:
S>>Если не брать в рассмотрение placement new, то разве что для создания объектов с private/protected конструкторами.
TB>Мне казалось что для этого используются статик методы, создающие объект
Простенький пример:
#include <memory>
class manager;
class worker {
friend class manager;
int i_;
worker(int v) : i_{v} {};
public:
int i() const noexcept { return i_; }
};
class manager {
public:
int do_something() {
std::unique_ptr<worker> in{ new worker(0) };
return in->i_;
}
};
int main() {
manager o;
return o.do_something();
}
В manager::do_something не получится использовать std::make_unique, т.к. конструктор у worker-а приватный.
И не важно, будет ли do_something статическим или нет.
Здравствуйте, so5team, Вы писали:
TB>>мусор типа оператора new, кстати нахрена он нужен после 11 года? S>... то разве что для создания объектов с private/protected конструкторами.
Да и тут во многих случаях (если я правильно понимаю, речь про make_shared/make_unique) необязательно. Но я тоже, бывает, делаю через new в таких случаях.
ну или если конкретный тип умного (или неумного) указателя может быть разным в шаблоне. Вроде такого(иллюстративно):
Здравствуйте, so5team, Вы писали:
TB>>Мне казалось что для этого используются статик методы, создающие объект S>Простенький пример: S>[...]
В этом примере место создания `unique_ptr` находится вне `worker`, хоть и в дружественном классе.
T4r4sB предполагает, что такое как бы и должно решаться статик методами (и решается, но с оговорками, см. комментарии):
class worker {
private:
int i_;
worker(int v) : i_{v} {};
public:
static std::unique_ptr<worker> Create(int v) {
#if 0
// This one fails because `make_unique` tries to access private Ctorreturn std::make_unique<worker>(v);
#else// We are enforced to use `new` in this case.return std::unique_ptr<worker>{new worker(v)};
#endif
}
};
т.е. проблема в том, что нам нужно вызвать `make_unique<worker>`, а уж он-то и не может добраться к нашему закрытому конструктору.
Решается либо через new, как в примере, либо через passkey idiom
Сделать `make_unique<worker>` другом, вроде как, нельзя.
Здравствуйте, serg_joker, Вы писали:
_>т.е. проблема в том, что нам нужно вызвать `make_unique<worker>`, а уж он-то и не может добраться к нашему закрытому конструктору.
Да.
_>Решается либо через new, как в примере, либо через passkey idiom