Re[5]: Правильное использование new/delete
От: Кодт Россия  
Дата: 29.07.03 15:15
Оценка:
Здравствуйте, Hermes, Вы писали:

H>>>char *ch2[3];
H>>>ch2[0] = new char[8];
H>>>ch2[0] = "0000000";

H>А почему так нелься? Объясните пожалуйста!!

Можно, но не нужно

Сам приглядись к тому, что ты написал:
some_var = new_memory;
some_var = some_pointer;

в результате указатель на выделенную память потеряли.

Кстати говоря, строковый литерал имеет тип (const char)*, и присваивать его переменной типа (char)* нельзя!
Потому что через переменную можно модифицировать указываемые данные:
ch2[0][1] = '7';


Что читать:
— работа со строками в Си и С++
— выделение памяти в Си и С++
Читать нужно, поскольку это — азы, без которых можно долго ходить по граблям, методом "не компилится" — "компилится но слетает" — "не слетает но глючит" — "не глючит, но заказчик рвет волосы подмышками".
Перекуём баги на фичи!
Re[6]: Правильное использование new/delete
От: Аноним  
Дата: 29.07.03 16:35
Оценка:
Кодт и Другой Аноним... Громадное Вам спасибо!!!
Re[2]: Правильное использование new/delete
От: ice71crew Россия  
Дата: 01.08.03 09:04
Оценка:
Здравствуйте, UnrealAlex

Поясните мне глупому, какая разница между


void XString::operator =(XString& xstring)

и

XString& XString::operator =(XString& xstring)


Зачем вообще необходимо возвращать какое то значение в данном случае.
-=Ай=-
Re[3]: Правильное использование new/delete
От: Аноним  
Дата: 01.08.03 09:13
Оценка:
Здравствуйте, ice71crew, Вы писали:

I>
I>XString& XString::operator =(XString& xstring)
I>


I>Зачем вообще необходимо возвращать какое то значение в данном случае.


Общепринято в Си и Си++, что присваивание — операция, возвращающая результат, чем можно пользоваться для построения "цепочечных" присвоений:

a = b = c = 1;
Re[3]: Правильное использование new/delete
От: Кодт Россия  
Дата: 01.08.03 10:06
Оценка:
Здравствуйте, ice71crew, Вы писали:

I>Поясните мне глупому, какая разница между

I>void XString::operator =(XString& xstring)

I>и
I>XString& XString::operator =(XString& xstring)


I>Зачем вообще необходимо возвращать какое то значение в данном случае.


Во-первых, параметр оператора присваивания должен быть или локальной копией, или константной ссылкой.
Иначе нельзя будет присваивать ни временные, ни константные объекты.

Тот факт, что VC игнорирует константность временного объекта, не значит, что этим можно пользоваться.

Во-вторых, зачем возвращать ссылку (на себя):
— для образования цепочки присваиваний
— для вызова методов объекта
XString a, b;
...

a = b = "hello"; // a.operator=(b.operator=("hello"))

(a = "world").makeUpper();
Перекуём баги на фичи!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.