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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

об этом тоже стоит помнить
...
Рейтинг: 0 / 0
auto_ptr или new + delete
    #34393116
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Голенков Владимир 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
auto_ptr или new + delete
    #34393279
Память не высвобождается, но система в нокаут не уходит. WinXP, по крайней мере...

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

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

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

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

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

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

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

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

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

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


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

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

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

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


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