Когда мне нужно использовать malloc в C ++? - PullRequest
4 голосов
/ 09 декабря 2011

Если я могу создать QString в C ++, например:

QString s = "my string"; // or,
QString *s = new QString("my string");

Тогда, когда мне нужно будет использовать событие malloc?

Ответы [ 4 ]

11 голосов
/ 09 декабря 2011

Вам никогда не нужно использовать malloc в C ++.

Хорошо, теперь, когда я сказал никогда , одно исключение - когда вы используете код C, который по тем или иным причинам становится владельцем блока памяти, который вы ему даете, и позже вызывает free на указатель на эту память, чтобы освободить его.

Я никогда не видел этого раньше (я обычно не использую библиотеки C и не знаю, насколько распространен этот сценарий), это просто надуманная ситуация, в которой я могу подумать, где использование malloc будет не необязательно, потому что это неопределенное поведение - вызывать free на части памяти, созданной new.

2 голосов
/ 09 декабря 2011

Практически никогда не требуется использовать malloc в C ++.

1 голос
/ 09 декабря 2011

Никогда!

malloc выделяет неинициализированную память. Вам редко нужно делать это в C ++. Большую часть времени вы создаете и уничтожаете объекты, используя new и delete.

Есть несколько ситуаций, когда вам нужно выделять неискаженную память, например, при реализации контейнеров динамического размера, таких как std::vector и boost::optional. Но тогда путь C ++ - это не использовать malloc и free, а сделать

void* p = operator new(1000);
...
operator delete(p);
0 голосов
/ 09 декабря 2011

C ++ в основном обрабатывает выделение и освобождение для вас, в отличие от C.

Другими словами, вам никогда не придется использовать malloc для вашего примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...