Анонимный объект - это что-то весьма простое, что почти все уже делали, но чего многие бояться. Надеюсь в этом видео развеять несколько мифов по поводу сложности этого подхода в программировании.
Володя привет, а может как будет время и про рекурсию сделаешь видео - у тебя получается все очень доходчиво - думаю многим будет интересно - начинающим =)
не сказали самого главного: что происходит с анонимным объектом сразу после того как он используется? он остается в памяти до окончания блока или сразу вызывается деструктор??? или в разных языках по разному? тогда хотя бы несколько примеров дали, например в java & cpp
За функцию f (которая возвращает 5) могу сказать, что компиляторы стали очень умные и писать можно как угодно (компилятор вообще может сразу поставить значение 5 вместо вызова). Если рассматривать первый вариант как действительно функцию, то нужно отметить, что result создастся на стеке, а 5 - immediate value (непосредственное значение), возврат будет не где-то в неизвестной ячейки, а в регистре eax. А вообще лучше пример такой: std::vector v; v.push_back(new MyClass()); v.push_back(new MyClass()); .... и т. д Володь, если не трудно запишите пару начальных видео по интеллекту, нейронным сетям и т. д. и литературой. Буду признательно благодарен.
Thomas Morgan Будут уроки по ИИ... на грядущей неделе, если всё пойдёт нормально (должен был быть записан первый сегодня, но пришлось идти к зубному, сейчас еле говорить могу, так что урока не получилось-бы). Чтобы пустить слюни могу сказать, что написал небольшое приложение, хотелось вспомнить вещи изучаемые мною в универе. Не плохо получилось. К тому-же новое для себя узнал. В приложении робот бегает по полю и находит людей, чтобы потом начать их убивать... такая пост-аппокалиптическая игра, которая сама себя проигрывает...
хороший урок. Анонимные объекты мне очень часто были нужны как int foo (tree*, tree*, tree*); и потом foo (new NNode (new INode(1), new JNode(j)), MNode(new INode(5), new FNode(i,j), new UNode(i,j,k)), new KNode()); такой подход просто очень сокращает код. Другое дело, что если это сипп, то с таким подходом программа внезапно может потечь. С этим бороться можно с помощью умных указателей. Но я например слишком привык к сырым указателям, и каждый раз приходится изголяться, чтобы программа не текла. А вы делаете уроки по reverse engineering?
так Rvalue же могут иметь имена. int a, b; b=5; a=b; в 3й есть имя, которое может быть использовано в скоупе и это rvalue. анонимные объекты, здесь имелось в виду, это указатели, которые в некоторый момент времени могут быть либо использованы, либо именованы. например если у нас описан класс MyInt() и мы пишем функцию, которая будет ждать MyInt() и у нас будет конструктор нашего класса, где будем ждать обычный инт, то можно сделать при вызове foo(new MyInt(1), new MyInt(2), new MyInt(3)); 3 указателя на объекты, которые мы передали были анонимными. или вообще MyInt f1() {return new MyInt(1);} и потом foo (f1(), f1(), f1()); foo получила 3 объекта и будет пользоваться именами, которые были указаны в её определении^W сигнатуре внутри себя.
Для меня, как для новичка, язык Java становится более понятным, и я начинаю лучше его понимать! Спасибо большое!
Володя привет, а может как будет время и про рекурсию сделаешь видео - у тебя получается все очень доходчиво - думаю многим будет интересно - начинающим =)
Sasha Gedz 26-го января 2014-го года был днём, когда я предсказал ваше пожелание: czcams.com/video/3YbRUfhIf0g/video.html
блин, я невнимательный подписчик =), иду смотреть - спасибо !
не сказали самого главного: что происходит с анонимным объектом сразу после того как он используется? он остается в памяти до окончания блока или сразу вызывается деструктор??? или в разных языках по разному? тогда хотя бы несколько примеров дали, например в java & cpp
В джаве он будет уничтожен при следующем запуске сборщика мусора (а пока будет висеть в памяти)
За функцию f (которая возвращает 5) могу сказать, что компиляторы стали очень умные и писать можно как угодно (компилятор вообще может сразу поставить значение 5 вместо вызова). Если рассматривать первый вариант как действительно функцию, то нужно отметить, что result создастся на стеке, а 5 - immediate value (непосредственное значение), возврат будет не где-то в неизвестной ячейки, а в регистре eax.
А вообще лучше пример такой:
std::vector v;
v.push_back(new MyClass());
v.push_back(new MyClass());
.... и т. д
Володь, если не трудно запишите пару начальных видео по интеллекту, нейронным сетям и т. д. и литературой. Буду признательно благодарен.
Thomas Morgan Будут уроки по ИИ... на грядущей неделе, если всё пойдёт нормально (должен был быть записан первый сегодня, но пришлось идти к зубному, сейчас еле говорить могу, так что урока не получилось-бы).
Чтобы пустить слюни могу сказать, что написал небольшое приложение, хотелось вспомнить вещи изучаемые мною в универе. Не плохо получилось. К тому-же новое для себя узнал. В приложении робот бегает по полю и находит людей, чтобы потом начать их убивать... такая пост-аппокалиптическая игра, которая сама себя проигрывает...
Vladimir Mozhenkov наконец то =))
хороший урок. Анонимные объекты мне очень часто были нужны как int foo (tree*, tree*, tree*); и потом foo (new NNode (new INode(1), new JNode(j)), MNode(new INode(5), new FNode(i,j), new UNode(i,j,k)), new KNode()); такой подход просто очень сокращает код. Другое дело, что если это сипп, то с таким подходом программа внезапно может потечь. С этим бороться можно с помощью умных указателей. Но я например слишком привык к сырым указателям, и каждый раз приходится изголяться, чтобы программа не текла. А вы делаете уроки по reverse engineering?
Я так понимаю в плюсах анонимные объекты и rvalue объекты - одно и то же?
так Rvalue же могут иметь имена. int a, b; b=5; a=b; в 3й есть имя, которое может быть использовано в скоупе и это rvalue. анонимные объекты, здесь имелось в виду, это указатели, которые в некоторый момент времени могут быть либо использованы, либо именованы. например если у нас описан класс MyInt() и мы пишем функцию, которая будет ждать MyInt() и у нас будет конструктор нашего класса, где будем ждать обычный инт, то можно сделать при вызове foo(new MyInt(1), new MyInt(2), new MyInt(3)); 3 указателя на объекты, которые мы передали были анонимными. или вообще MyInt f1() {return new MyInt(1);} и потом foo (f1(), f1(), f1()); foo получила 3 объекта и будет пользоваться именами, которые были указаны в её определении^W сигнатуре внутри себя.
Так это было всё про язык си с плюсами?
Володя врёт, он не Володя! Он Исус, и он учит вас ООП, теперь мы программисты от бога.
не распускайте волосы, не красиво