C# >>> C++
|
|
0x90 | Дата: Суббота, 03 Декабря 2011, 17:10 | Сообщение # 21 |
участник
Сейчас нет на сайте
| Quote (Matou) если бы мне понадобились 100 байтов в памяти как-нибудь платформо незавесимо выделить я бы malloc() юзнул, например. C чего ты взял, что malloc более платформонезависимый?
|
|
| |
Stage | Дата: Суббота, 03 Декабря 2011, 17:10 | Сообщение # 22 |
постоянный участник
Сейчас нет на сайте
| Quote listOfFoo.Where(delegate(Foo x) { return x.size > 10; }); Обычный фильтр, в качестве предиката в С++ можно передать указатель на функцию.
Quote matrix = (int **) malloc (N * sizeof(int*)); Аналогичный код через new можно писать и на шарпе. Директива unsafe позволяет использовать указатели.
|
|
| |
Kamskii | Дата: Суббота, 03 Декабря 2011, 17:11 | Сообщение # 23 |
Game ≠ Toy
Сейчас нет на сайте
| Между new/delete и malloc/free разница в том, что первая пара вызывает конструктор (если вы выделяете память для объекта класса), ну и деструктор для delete. malloc и free остались со времен C, хотя работают все еще прекрасно.
|
|
| |
Vinchensoo | Дата: Суббота, 03 Декабря 2011, 17:17 | Сообщение # 24 |
Злобный социопат с комплексом Бога
Сейчас нет на сайте
| Quote (Kamskii) Между new/delete и malloc/free разница в том, что первая пара вызывает конструктор (если вы выделяете память для объекта класса), ну и деструктор для delete. malloc и free остались со времен C, хотя работают все еще прекрасно. У многих людей, кто начинал с плюсов в универе и никогда не работал с дин.памятью маллок вызывал шок))
Мне привычнее Нью, чтобы работать с длинной массивов еще со времен паскаля(setlength для дин. массива=]).
|
|
| |
Stage | Дата: Суббота, 03 Декабря 2011, 17:21 | Сообщение # 25 |
постоянный участник
Сейчас нет на сайте
| Quote new/delete и malloc/free new/delete - это плюсовые врапперы для malloc и free.
|
|
| |
noTformaT | Дата: Суббота, 03 Декабря 2011, 17:32 | Сообщение # 26 |
Ukrainian independent game developer
Сейчас нет на сайте
| Quote (Stage) Обычный фильтр, в качестве предиката в С++ можно передать указатель на функцию. Quote (Stage) Аналогичный код через new можно писать и на шарпе. Директива unsafe позволяет использовать указатели. ммм, это можно написать практически на всех языках сегодняшнего времени... И это был простой пример не совместимости этих двух яп... я же написал выше... Quote (noTformaT) эти языки не совместимы.... В си шарпе не работает простой с++ код, в с++ шарповский, придется переписывать...
Quote (Vinchensoo) У многих людей, кто начинал с плюсов в универе и никогда не работал с дин.памятью маллок вызывал шок)) сомневаюсь что в универе не рассказывают о принципах динамич. памяти... ммм, когда мне преподавали с++, дефайн и маллок были желательны в коде... сейчас видимо все поменялось )))
@noTformaT
|
|
| |
Kamskii | Дата: Суббота, 03 Декабря 2011, 17:37 | Сообщение # 27 |
Game ≠ Toy
Сейчас нет на сайте
| Quote (noTformaT) ммм, когда мне преподавали с++, дефайн и маллок были желательны в коде... сейчас видимо все поменялось ))) Ну, когда и stdio для ввода/вывода использовали (да и сейчас тоже ), а на данный момент стандарт C++ рекомендует использовать iostream. Хотя все это дело лишь вкуса, ну и в некоторой мере необходимости.
|
|
| |
noTformaT | Дата: Суббота, 03 Декабря 2011, 17:40 | Сообщение # 28 |
Ukrainian independent game developer
Сейчас нет на сайте
| Quote (Stage) new/delete - это плюсовые врапперы для malloc и free. Вернее так, (возможно) в своей реализации оператор new вызывает аллоки... но, принципы их использования - это абсолютно разные вещи... Первый просто выделяет память (маллок), нью - выделяет память, вызывает конструктор, заполняет выделенную память (инициализации) и т.д.
@noTformaT
|
|
| |
Stage | Дата: Суббота, 03 Декабря 2011, 17:42 | Сообщение # 29 |
постоянный участник
Сейчас нет на сайте
| Quote ммм, это можно написать практически на всех языках сегодняшнего времени... И это был простой пример не совместимости этих двух яп... я же написал выше... Ты спросил как можно записать строчку на С++, я ответил. Пример у тебя не очень вышел, зачем приплетать сюда linq и делегаты? Это часть dotnet платформы, которая, кстати, доступна из (оп) managed C++. С указателями из шарпа работать можно, не вырезали их там.
Quote когда мне преподавали с++, дефайн и маллок были желательны в коде Это проблема преподов старперов уже.
|
|
| |
Matou | Дата: Суббота, 03 Декабря 2011, 17:44 | Сообщение # 30 |
Исходный коТ
Сейчас нет на сайте
| Ну вы и нафлудили, лучше бы я помалкивал со своим malloc'ом) Quote (0x90) C чего ты взял, что malloc более платформонезависимый? А почему нет?
|
|
| |
noTformaT | Дата: Суббота, 03 Декабря 2011, 17:48 | Сообщение # 31 |
Ukrainian independent game developer
Сейчас нет на сайте
| Quote (Stage) Ты спросил как можно записать строчку на С++, я ответил. Пример у тебя не очень вышел, зачем приплетать сюда linq и делегаты? Это часть dotnet платформы, которая, кстати, доступна из (оп) managed C++. С указателями из шарпа работать можно, не вырезали их там. пишу еще раз... Это был пример того что код на шарпе не совместим с кодом на си++ и обратно...
Первый пример с лямбда выражением (взято с вики) можно написать на с++, но уже передавать ссылку на функцию... Я не стал сюда кидать шарповский код listOfFoo.Where(x => x.size > 10); , так как таких возможностей нет в с++ до 11 версии, поэтому кинул попроще istOfFoo.Where(delegate(Foo x) { return x.size > 10; }); второй пример с маллоками, его тоже придется переписывать...
@noTformaT
|
|
| |
Stage | Дата: Суббота, 03 Декабря 2011, 17:53 | Сообщение # 32 |
постоянный участник
Сейчас нет на сайте
| Тут у кого-то стоял вопрос о совместимости этих двук языков на уровне исходного кода чтоли? Я думаю все это понимают.
Это Func<T1, T2>, стандартный делегат.
|
|
| |
0x90 | Дата: Суббота, 03 Декабря 2011, 17:56 | Сообщение # 33 |
участник
Сейчас нет на сайте
| Quote (Matou) А почему нет? Потому что Quote (Stage) new/delete - это плюсовые врапперы для malloc и free. инфа 100%
|
|
| |
Matou | Дата: Суббота, 03 Декабря 2011, 18:16 | Сообщение # 34 |
Исходный коТ
Сейчас нет на сайте
| Ну почему же?
|
|
| |
Вагон | Дата: Суббота, 03 Декабря 2011, 18:21 | Сообщение # 35 |
почетный гость
Сейчас нет на сайте
| Короче я понял что шарп и си++ это 2 разных языка, совсем не похожих друг на друга.
|
|
| |
0x90 | Дата: Суббота, 03 Декабря 2011, 18:28 | Сообщение # 36 |
участник
Сейчас нет на сайте
| Quote (Matou) Ну почему же? Потому что вызвав new ты все-равно в итоге обращаешься к malloc, который в свою очередь уже вызывает системнозависимую функцию(в винде, к примеру, HeapAlloc). Назови хоть одну причину, почему malloc должен быть менее зависимым от платформы.
|
|
| |
Max_Gamedev | Дата: Суббота, 03 Декабря 2011, 19:32 | Сообщение # 37 |
почетный гость
Сейчас нет на сайте
| Вопрос в быстродействии. new - высокоуровневый, malloc - низкоуровневый.
|
|
| |
05142 | Дата: Суббота, 03 Декабря 2011, 20:01 | Сообщение # 38 |
постоянный участник
Сейчас нет на сайте
| char* s = new char[15];
char* s = malloc(15 * sizeof(char));
Ну конечно последнее можно довести и до malloc(15); но Бьёрн в своей книге написал "используйте new"Добавлено (03.12.2011, 20:01) ---------------------------------------------
Quote (Max_Gamedev) new - высокоуровневый, malloc - низкоуровневый. Они оба высокоуровневые.
mecinvader
|
|
| |
Matou | Дата: Суббота, 03 Декабря 2011, 21:05 | Сообщение # 39 |
Исходный коТ
Сейчас нет на сайте
| Quote (0x90) Назови хоть одну причину, почему malloc должен быть менее зависимым от платформы. Потому что malloc() выделяет байты, а new ориентируется на размер типов данных, которые могут сильно меняться от платформы к платформе. Так то!
|
|
| |
0x90 | Дата: Суббота, 03 Декабря 2011, 21:18 | Сообщение # 40 |
участник
Сейчас нет на сайте
| Quote (Matou) Потому что malloc() выделяет байты, а new ориентируется на размер типов данных, которые могут сильно меняться от платформы к платформе. Так то! Вот ты о чем :-) Убедил.
|
|
| |