Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / auto_ptr или new + delete / 25 сообщений из 74, страница 1 из 3
14.03.2007, 13:13
    #34390032
sashka304
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
auto_ptr или new + delete
Ребята, просветите что лучше использовать auto_ptr или new + delete.
или в принципе разницы никакой нет, просто при использовании auto_ptr ненужно заботится о том чтоб не забыть сделать delete обьекту
...
Рейтинг: 0 / 0
14.03.2007, 13:36
    #34390111
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
auto_ptr или new + delete
auto_ptr'ом надо уметь пользоваться, иначе потом будет много отрицательных эмоций. Лучше взять что-нибудь из boost. Хотя ежели разницы нет то проект небольшой.
...
Рейтинг: 0 / 0
14.03.2007, 14:00
    #34390208
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
auto_ptr или new + delete
Главное - это уяснить, что голые new + detele поценциально опасны. А далее уже надо выбирать среди std::auto_ptr, boost::share_ptr и т.п. по тому, какая стратегия владения вам необходима. std::auto_ptr при копировании всегда передает право владения копии, boost::shared_ptr хранит указатель до тех пор, пока существует хотя бы одна ссылка на него.

Вы можете показать как вы будете использовать эти объекты?
...
Рейтинг: 0 / 0
14.03.2007, 14:03
    #34390223
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
auto_ptr или new + delete
Анатолий Широков пишет:

> Главное - это уяснить, что голые new + detele поценциально опасны. А

.... при наличии исключений .
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
14.03.2007, 14:05
    #34390240
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
auto_ptr или new + delete
Даже если бы в С++ не было исключений, никто не исключает возможность банально забыть освободить память (memory leak), присвоить указателю новое значение (memory leak).
...
Рейтинг: 0 / 0
14.03.2007, 14:06
    #34390247
auto_ptr или new + delete
.... при наличии исключений .

... return тоже неплохо
...
Рейтинг: 0 / 0
14.03.2007, 14:08
    #34390253
auto_ptr или new + delete
... как и любой выход из влока, break к примеру в цикле
...
Рейтинг: 0 / 0
14.03.2007, 15:02
    #34390506
auto_ptr или new + delete
суммарно:

- любой из smart_ptr представляет реализацию более общей идиомы RAII для управления ресурсом памяти (очень важно при работе с исключениями, и не только)

- реализация std::auto_ptr призвана обеспечить минимальный (м.б. нулевым) overhead по сравнению с обычными указателями, но платой за это является отсутствие полноценной семантики копирования (очень важно для работы с контейнерами, так же передача параметров по значению)

отсюда область применения -- локальные блоки, иначе альтернатива boost::shared_ptr (или еще чего)

- если вас интересует случай new[], то тут используются std::vector, boost::shared_array (или еще чего), но не auto_ptr

/* поправьте если чего не так */
...
Рейтинг: 0 / 0
14.03.2007, 15:59
    #34390740
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
auto_ptr или new + delete
Голенков Владимир пишет:

Рибяты йа нидумал о таких прастых вищах.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
14.03.2007, 16:07
    #34390772
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
auto_ptr или new + delete
Анатолий ШироковДаже если бы в С++ не было исключений, никто не исключает возможность банально забыть освободить память (memory leak), присвоить указателю новое значение (memory leak).

это лечится новыми руками от ушей.

опять же зависит от кривизны рук.
если сразу ничего не удаляете, то никогда ничто вам не поможет.
...
Рейтинг: 0 / 0
14.03.2007, 16:39
    #34390886
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
auto_ptr или new + delete
Да-да, вы с детства программируете без утечек памяти и пользовались всю жизнь только голыми указателями ;) Skope guard-ы решают перечисленные здесь проблемы и позволяют получить ясность в вопросах связанные с временем жизни динамических объектов. Вы, я так понял, ратуете за выпремление рук - как вы собираетесь достич этой цели?
...
Рейтинг: 0 / 0
14.03.2007, 18:25
    #34391282
auto_ptr или new + delete
Рибяты йа нидумал о таких прастых вищах.

панемайу! но для аффтора топега возможна фсе не так проста..
...
Рейтинг: 0 / 0
14.03.2007, 18:28
    #34391290
auto_ptr или new + delete
Да-да, вы с детства программируете без утечек памяти и пользовались всю жизнь только голыми указателями ;)

да, было время в детстве на plain C лабали ;)
а некоторые на нем и до сих пор рисуют
и ничего
...
Рейтинг: 0 / 0
14.03.2007, 18:30
    #34391298
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
auto_ptr или new + delete
Анатолий Широков... и пользовались всю жизнь только голыми указателями ;)
только её половину..., потом на ссылки перешел.. ;)

sashka304
Ребята, просветите что лучше использовать auto_ptr или new + delete.

Для какой задачи?

Если в классе один раз выделяется блок памяти, висит там без изменений, и убивается в деструкторе, зачем там auto_ptr?
...
Рейтинг: 0 / 0
14.03.2007, 18:46
    #34391342
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
auto_ptr или new + delete
ErV Анатолий Широков... и пользовались всю жизнь только голыми указателями ;)
только её половину..., потом на ссылки перешел.. ;)

sashka304
Ребята, просветите что лучше использовать auto_ptr или new + delete.

Для какой задачи?

Если в классе один раз выделяется блок памяти, висит там без изменений, и убивается в деструкторе, зачем там auto_ptr?
А потом их становится два, и ежели 2-ой не выделился нужно вернуть первый. И так без конца один и тотже спор. Что лучше быть богатым тормозом или бедным шустряком.
...
Рейтинг: 0 / 0
14.03.2007, 19:06
    #34391397
sashka304
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
auto_ptr или new + delete
лучще быть богатым тормозом :))
вообщем у меня пока выделение памяти под объект происходит в одном классе, раньше часть кода была написана с new и delete, а мне вот надо немного дописать и переписать, вот я думаю использовать auto_ptr или делать как там и было... обьектиков в разных ф-ях создается от 1 до 10.

Почитав посты думаю всетаки сделаю я auto_ptr :)

спасибо, ребята, большое!!!
...
Рейтинг: 0 / 0
14.03.2007, 21:18
    #34391624
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
auto_ptr или new + delete
Анатолий ШироковДа-да, вы с детства программируете без утечек памяти и пользовались всю жизнь только голыми указателями ;) Skope guard-ы решают перечисленные здесь проблемы и позволяют получить ясность в вопросах связанные с временем жизни динамических объектов. Вы, я так понял, ратуете за выпремление рук - как вы собираетесь достич этой цели?

я за нормальный код.
на самом деле руки тут и ни при чем. и я знаю (работаю) с проектом в 100к строк. и там сделано все нормально. любая динамика повешена на SOFT_FREE или SOFT_DELETE. это - простые дефайны, облегчившие и решившие большинство задач.

для прочей прстоты используются СОБСТВЕННЫЕ манагеры, т.к. они и быстрее и понятней.
...
Рейтинг: 0 / 0
15.03.2007, 03:14
    #34391861
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
auto_ptr или new + delete
blinded
А потом их становится два, и ежели 2-ой не выделился нужно вернуть первый. И так без конца один и тотже спор. Что лучше быть богатым тормозом или бедным шустряком.
Если я точно знаю, где и как обьект будет использоваться, то можно и без auto_ptr обойтись. Тем более, как я понял, для конструкции типа SomeClass** (динамически выделяется массив указателей, для указателей создяются обьекты, потом указатели сортируются) это не вариант.

Спорить не буду - не вижу смысла. (так как выльется в очередной холивар типа "исключения - за и против" и "кто-нибудь обьяснит мне чем Дельфи лучше C++")
...
Рейтинг: 0 / 0
15.03.2007, 11:45
    #34392662
auto_ptr или new + delete
ErV : Если в классе один раз выделяется блок памяти, висит там без изменений, и убивается в деструкторе, зачем там auto_ptr?

однакож, если в конструкторе выделяется память а потом происходит неперехваченное исключение, то до деструктора дело просто не доходит == memory leak

об этом тоже стоит помнить
...
Рейтинг: 0 / 0
15.03.2007, 13:18
    #34393116
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
auto_ptr или new + delete
Голенков Владимир ErV : Если в классе один раз выделяется блок памяти, висит там без изменений, и убивается в деструкторе, зачем там auto_ptr?

однакож, если в конструкторе выделяется память а потом происходит неперехваченное исключение, то до деструктора дело просто не доходит == memory leak

об этом тоже стоит помнить
Насколько я помню, если класс (в котором выделяется блок памяти) используется в программе как
SomeClass someclass; //а не SomeClass* someclass;
произойдет раскрутка стека, и будет вызван деструктор.
При исключении в конструкторе, если оно не было обработано, работа программы завершается, а системные ресурсы, используемые процессом, под Win, если я не ошибаюсь, освобождаются по факту его завершения. Можете проверить:
Код: plaintext
1.
2.
3.
4.
void main(void){
	int* c = new int[ 50000000 ];
	getch();
}
Память не высвобождается, но система в нокаут не уходит. WinXP, по крайней мере...
...
Рейтинг: 0 / 0
15.03.2007, 13:51
    #34393279
auto_ptr или new + delete
Память не высвобождается, но система в нокаут не уходит. WinXP, по крайней мере...

исчо раз: при неперехваченном исключении в конструкторе, объект не считается созданным и его деструктор не вызывается

если дело происходит внутри сервиса (дЭмона), то скорей всего исключение перехватывается на более высоком уровне и пишется в лог, работа продолжается, утечка накапливается

и через некоторое время сервер "станет раком"

"и это очень плохо"
...
Рейтинг: 0 / 0
15.03.2007, 20:04
    #34394623
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
auto_ptr или new + delete
Голенков Владимир Память не высвобождается, но система в нокаут не уходит. WinXP, по крайней мере...

исчо раз: при неперехваченном исключении в конструкторе, объект не считается созданным и его деструктор не вызывается

если дело происходит внутри сервиса (дЭмона), то скорей всего исключение перехватывается на более высоком уровне и пишется в лог, работа продолжается, утечка накапливается

и через некоторое время сервер "станет раком"

"и это очень плохо"

1) и что, прям auto_ptr это решает? не верю.
2) в том числе и поэтому я за нормальный код (т.е. без корявых исключений).

все гораздо проще.
...
Рейтинг: 0 / 0
15.03.2007, 21:12
    #34394713
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
auto_ptr или new + delete
Aklin1) и что, прям auto_ptr это решает? не верю.
2) в том числе и поэтому я за нормальный код (т.е. без корявых исключений).
1)Представь себе да решает
2)А за тебя все уже решили, оператор new это делает почем зря
C++
...
Рейтинг: 0 / 0
16.03.2007, 16:04
    #34396399
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
auto_ptr или new + delete
blinded Aklin1) и что, прям auto_ptr это решает? не верю.
2) в том числе и поэтому я за нормальный код (т.е. без корявых исключений).
1)Представь себе да решает
2)А за тебя все уже решили, оператор new это делает почем зря


1) все равно не верю
1.1) если и решает, то коряво
1.1.1) а ты не думал, зачем программисту дали такую свободу? чтобы он сам все нормально делал.

2) new - не есть нормальный код ? самый что ни есть нормальный
а вот исключения как уже говорилось - плохо.

[quote]
C++[/quote]
не совсем согласен, ибо не я работю на си, а он на меня.
...
Рейтинг: 0 / 0
16.03.2007, 16:25
    #34396511
auto_ptr или new + delete

1) все равно не верю
1.1) если и решает, то коряво


вариант 1:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
class A
{
private:

	B* _pb;
	C* _pc;
	
public:

	A()
	{
		//исключение возможно:
		auto_ptr<B> pb( new B() );
		auto_ptr<C> pc( new C() );
		
		//исключение не возможно:
		_pb = pb.release();
		_pc = pc.release();
	}

	~A()
	{
		delete _pb;
		delete _pc;
	}
};

вариант 2:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class A
{
private:

	auto_ptr<B> _pb;
	auto_ptr<C> _pc;
	
public:

	A(): _pb( new B() ), _pc( new C() )
	{
	}
};

впрочем есть еще альтернатива try/catch

2) new - не есть нормальный код ? самый что ни есть нормальный
а вот исключения как уже говорилось - плохо.


тут дело в том, что исключения это часть современного C++
- поэтому, либо вы контролируете весь свой код, включая библиотеки
- либо plain old C
- либо миритесь с тем, что new A() может высвать исключение

"такие дела"
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / auto_ptr или new + delete / 25 сообщений из 74, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]