Суббота, 20 Апреля 2024, 05:14

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Форум игроделов » Программирование » C/C++ » C# >>> C++ (Даем советы.)
C# >>> C++
0x90Дата: Суббота, 03 Декабря 2011, 17:10 | Сообщение # 21
участник
Сейчас нет на сайте
Quote (Matou)
если бы мне понадобились 100 байтов в памяти как-нибудь платформо незавесимо выделить я бы malloc() юзнул, например.

C чего ты взял, что malloc более платформонезависимый? smile
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, хотя работают все еще прекрасно. happy
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 для ввода/вывода использовали (да и сейчас тоже smile ), а на данный момент стандарт 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
постоянный участник
Сейчас нет на сайте
Тут у кого-то стоял вопрос о совместимости этих двук языков на уровне исходного кода чтоли? Я думаю все это понимают.

Quote
x => x.size > 10

Это Func<T1, T2>, стандартный делегат.
0x90Дата: Суббота, 03 Декабря 2011, 17:56 | Сообщение # 33
участник
Сейчас нет на сайте
Quote (Matou)
А почему нет?

Потому что
Quote (Stage)
new/delete - это плюсовые врапперы для malloc и free.

инфа 100% smile
MatouДата: Суббота, 03 Декабря 2011, 18:16 | Сообщение # 34
Исходный коТ
Сейчас нет на сайте
Quote (0x90)
Потому что

Ну почему же?



ВагонДата: Суббота, 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 ориентируется на размер типов данных, которые могут сильно меняться от платформы к платформе. Так то!

Вот ты о чем :-) Убедил.
Форум игроделов » Программирование » C/C++ » C# >>> C++ (Даем советы.)
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг