Size: a a a

2020 May 15

v

vehlwn in pro.cxx
Fedor
struct A
{
   A(std::string s) : s_{std::move(s)} {}
   std::string s_;
};

int main()
{
   A a{"hello"};
   // a.~A(); // uncomment to avoid UB
   new(&a) A{"world"};

   return 0;
}

Правильно ли я понимаю, что без вызова деструктора это UB?
Сконструировал два объекта. Вызвал один деструктор. 2 != 1. В чем вопрос?
источник

SH

Serhii Herashchenko in pro.cxx
vehlwn
Сконструировал два объекта. Вызвал один деструктор. 2 != 1. В чем вопрос?
думаю вопрос в том, уб ли так делать, или просто утечка памяти
источник

v

vehlwn in pro.cxx
Serhii Herashchenko
думаю вопрос в том, уб ли так делать, или просто утечка памяти
Утечка это и есть уб.
источник

SH

Serhii Herashchenko in pro.cxx
vehlwn
Утечка это и есть уб.
справедливо
источник

z

zeroid in pro.cxx
Утечка это утечка, а не уб...
источник

F

Fedor in pro.cxx
источник

NP

Nikita Provotorov in pro.cxx
Ребят, а есть где-нибудь табличка соответствия версий вижака с версиями компилятора, который идет в комплекте?
источник

S

ShadelessFox in pro.cxx
Nikita Provotorov
Ребят, а есть где-нибудь табличка соответствия версий вижака с версиями компилятора, который идет в комплекте?
источник

NP

Nikita Provotorov in pro.cxx
Пасиб
источник

F

Fedor in pro.cxx
vehlwn
Утечка это и есть уб.
источник

v

vehlwn in pro.cxx
bad_alloc уба не легче.
источник

v

vehlwn in pro.cxx
Особенное когда у тебя нет исключений.
источник

(

(: saD in pro.cxx
Кстати, new на всех компиляторах может кидать bad_alloc? Просто на clion с g++ пишет что catch-блок - unreachable code
источник

АР

Андрей Руссков... in pro.cxx
есть флаги с которыми new будет возвращать nullptr вместо выкидывания bad_alloc
источник

v

vehlwn in pro.cxx
(: saD
Кстати, new на всех компиляторах может кидать bad_alloc? Просто на clion с g++ пишет что catch-блок - unreachable code
Если у тебя нестандартный кодмелятор, то не на всех.
источник

AS

Anatoly Shirokov in pro.cxx
(: saD
Кстати, new на всех компиляторах может кидать bad_alloc? Просто на clion с g++ пишет что catch-блок - unreachable code
источник

v

vehlwn in pro.cxx
Андрей Руссков
есть флаги с которыми new будет возвращать nullptr вместо выкидывания bad_alloc
new int никогда не возвращает нуллптр.
::operator new(sizeof(int)) возможно.
источник

v

vehlwn in pro.cxx
while (true) {
           new int[100000000ul];   // throwing overload
       }
Они скопипастили код защитника виндовс.
источник

АР

Андрей Руссков... in pro.cxx
vehlwn
new int никогда не возвращает нуллптр.
::operator new(sizeof(int)) возможно.
ну по стандарту да, я ж не утверждаю что компиляторы придерживаются стандарта с любым набором флагов )
источник

v

vehlwn in pro.cxx
Андрей Руссков
ну по стандарту да, я ж не утверждаю что компиляторы придерживаются стандарта с любым набором флагов )
Или если у тебя старая методичка препода.
источник