std::auto_ptr и new[] - насколько это допустимо? :)
От: Дарней Россия  
Дата: 11.10.04 10:36
Оценка:
Вот пишу я, допустим, так:
  std::auto_ptr<byte> pBuf(new byte[dataSize]);

Запускаю... и наверно, получу граблей по лбу. Ибо в деструкторе будет вызван delete this->get();
А Священное Писание, то бишь стандарт, говорит — надо вызывать delete[]
Насколько я помню, для примитивных типов никакой катастрофы не будет... но тем не менее, это нужно считать "грязным кодом"?
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re: std::auto_ptr и new[] - насколько это допустимо? :)
От: korzhik Россия  
Дата: 11.10.04 10:39
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Вот пишу я, допустим, так:

Д>
Д>  std::auto_ptr<byte> pBuf(new byte[dataSize]);
Д>

Д>Запускаю... и наверно, получу граблей по лбу. Ибо в деструкторе будет вызван delete this->get();
Д>А Священное Писание, то бишь стандарт, говорит — надо вызывать delete[]

>но тем не менее, это нужно считать "грязным кодом"?

ага

используй scoped_array

или пиши свой auto_array
Re: std::auto_ptr и new[] - насколько это допустимо? :)
От: Mechanicus Беларусь  
Дата: 11.10.04 10:41
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Вот пишу я, допустим, так:

Д>
Д>  std::auto_ptr<byte> pBuf(new byte[dataSize]);
Д>

Д>Запускаю... и наверно, получу граблей по лбу. Ибо в деструкторе будет вызван delete this->get();
Д>А Священное Писание, то бишь стандарт, говорит — надо вызывать delete[]
Д>Насколько я помню, для примитивных типов никакой катастрофы не будет... но тем не менее, это нужно считать "грязным кодом"?
С точки зрения "практического программирования" — это сугубо религиозный вопрос. Но я бы так писать не стал. К тому же есть boost::shared_array и boost::scoped_array, хотя применение буста тоже многих смущает (хотя их обычно смущает и применение stl).
Re: std::auto_ptr и new[] - насколько это допустимо? :)
От: Batiskaf Израиль http://www.mult.ru/
Дата: 11.10.04 10:41
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Вот пишу я, допустим, так:

Д>
Д>  std::auto_ptr<byte> pBuf(new byte[dataSize]);
Д>

Д>Запускаю... и наверно, получу граблей по лбу. Ибо в деструкторе будет вызван delete this->get();
Д>А Священное Писание, то бишь стандарт, говорит — надо вызывать delete[]
Д>Насколько я помню, для примитивных типов никакой катастрофы не будет... но тем не менее, это нужно считать "грязным кодом"?

Это запрещено, если тебе нужен автоматический массив примитивных типов — воспользуйся std::vector, в конструкторе можешь задать размер буфера, &vector[0] возвращает указатель на начало массива, есть средства для гибкой стратегии управления памяти ( allocator, reserve ).
Will I live tomorrow? Well I just can't say
But I know for sure — I don't live today.
Jimi Hendrix.
Re[2]: std::auto_ptr и new[] - насколько это допустимо? :)
От: Дарней Россия  
Дата: 11.10.04 10:45
Оценка:
Здравствуйте, Mechanicus, Вы писали:

M>С точки зрения "практического программирования" — это сугубо религиозный вопрос. Но я бы так писать не стал. К тому же есть boost::shared_array и boost::scoped_array, хотя применение буста тоже многих смущает (хотя их обычно смущает и применение stl).


Похоже на то, что и сам C++ всё больше становится мистической тайной, а не просто языком программирования
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[2]: std::auto_ptr и new[] - насколько это допустимо? :)
От: Дарней Россия  
Дата: 11.10.04 10:47
Оценка:
Здравствуйте, Batiskaf, Вы писали:

B>Это запрещено, если тебе нужен автоматический массив примитивных типов — воспользуйся std::vector, в конструкторе можешь задать размер буфера, &vector[0] возвращает указатель на начало массива, есть средства для гибкой стратегии управления памяти ( allocator, reserve ).


Знаем, Майерса тоже читали
Меня просто сам вопрос заинтересовал. А где запрещено? Не помню ничего на эту тему
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[2]: std::auto_ptr и new[] - насколько это допустимо? :)
От: korzhik Россия  
Дата: 11.10.04 11:07
Оценка:
Здравствуйте, korzhik, Вы писали:

>или пиши свой auto_array


если соберёшься писать свой auto_array вот тебе пособие.
Re: std::auto_ptr и new[] - насколько это допустимо? :)
От: _nn_ www.nemerleweb.com
Дата: 11.10.04 11:10
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Вот пишу я, допустим, так:

Д>
Д>  std::auto_ptr<byte> pBuf(new byte[dataSize]);
Д>

Д>Запускаю... и наверно, получу граблей по лбу. Ибо в деструкторе будет вызван delete this->get();
Д>А Священное Писание, то бишь стандарт, говорит — надо вызывать delete[]
Д>Насколько я помню, для примитивных типов никакой катастрофы не будет... но тем не менее, это нужно считать "грязным кодом"?

Это ошибка будет

Воспользуйтесь поиском, неоднакратно обсуждалась тема выделения new[] и освобождения delete.

Вот недавно пробегала эта тема : здесь
Автор:
Дата: 04.10.04
.
Можно еще посмотреть и здесь
Автор:
Дата: 13.12.01
.
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.