есть ли в С# аналог std::auto_ptr ?
От: catBasilio  
Дата: 07.06.11 08:08
Оценка:
собственно сабж. с помощью него в с++ очень удобно организовывать RAII. пример:

Например что-то вроде:
class MyDialogWindow : public MyDialogBase
{
public:
 MyDialogWindow(){};
~MyDialogWindow()
{ 
  // Тут ничего писать не надо. оно все само освободится.
}

public:
  virtual void OnCreateFile()
  {
    Operation.reset(new FileOperation("c:\\file.txt"));
  }

  virtual void OnAddLineButton()
  {
    Operation->AddLine();
  }

  virtual void OnAddTitleButton()
  {
    Operation->AddTitle();
  }

  virtual void OnBlaBlaAction()
  {
    Operation->BlaBlaAction();
  }

private:
  std::auto_ptr<FileOperation> Operation;
}



При этом невозможно забыть освободить ресурс, так как оно произойдет автоматически.
А как подобное реализуется в C# ?
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Re: есть ли в С# аналог std::auto_ptr ?
От: -MyXa- Россия  
Дата: 07.06.11 08:12
Оценка:
Здравствуйте, catBasilio, Вы писали:

B>собственно сабж. с помощью него в с++ очень удобно организовывать RAII. пример:


Краткое объяснение здесь
Если не поможет, будем действовать током... 600 Вольт (C)
Re[2]: есть ли в С# аналог std::auto_ptr ?
От: catBasilio  
Дата: 07.06.11 08:36
Оценка:
Здравствуйте, -MyXa-, Вы писали:

MX>Здравствуйте, catBasilio, Вы писали:


B>>собственно сабж. с помощью него в с++ очень удобно организовывать RAII. пример:


MX>Краткое объяснение здесь


про IDisposable я знаю, там нужно явно реализовывать Dispose. если эабыл — то resource leak.
А я же имел ввиду про автоматическое освобождение ресурстов.
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Re: есть ли в С# аналог std::auto_ptr ?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 07.06.11 08:44
Оценка:
Здравствуйте, catBasilio, Вы писали:

Почитайте про IDisposable, using, try/finally, constrained execution regions, CriticalFinalizerObject
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: есть ли в С# аналог std::auto_ptr ?
От: TK Лес кывт.рф
Дата: 07.06.11 13:05
Оценка: +1
Здравствуйте, catBasilio, Вы писали:

B>про IDisposable я знаю, там нужно явно реализовывать Dispose. если эабыл — то resource leak.

B>А я же имел ввиду про автоматическое освобождение ресурстов.

Автоматически только сборка мусора. Если выхотите освободить ресурс в определенный момент времени, то это надо делать явно.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: есть ли в С# аналог std::auto_ptr ?
От: catBasilio  
Дата: 07.06.11 13:37
Оценка:
Здравствуйте, TK, Вы писали:

TK>Здравствуйте, catBasilio, Вы писали:


B>>про IDisposable я знаю, там нужно явно реализовывать Dispose. если эабыл — то resource leak.

B>>А я же имел ввиду про автоматическое освобождение ресурстов.

TK>Автоматически только сборка мусора. Если выхотите освободить ресурс в определенный момент времени, то это надо делать явно.


ясно. Спасибо за рпзъяснения.
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Re[2]: есть ли в С# аналог std::auto_ptr ?
От: Aviator  
Дата: 07.06.11 20:24
Оценка: 7 (2) +2 -2
Здравствуйте, -MyXa-, Вы писали:

MX>Здравствуйте, catBasilio, Вы писали:


B>>собственно сабж. с помощью него в с++ очень удобно организовывать RAII. пример:


MX>Краткое объяснение здесь

А вообще, using это каменный век по сравнению с работой деструкторов...
Re[3]: есть ли в С# аналог std::auto_ptr ?
От: HowardLovekraft  
Дата: 08.06.11 05:52
Оценка: +2 :)
Здравствуйте, Aviator, Вы писали:

A>А вообще, using это каменный век по сравнению с работой деструкторов...

Толсто троллите.
Re[4]: есть ли в С# аналог std::auto_ptr ?
От: WolfHound  
Дата: 08.06.11 07:55
Оценка: 1 (1) +1 -1
Здравствуйте, HowardLovekraft, Вы писали:

A>>А вообще, using это каменный век по сравнению с работой деструкторов...

HL>Толсто троллите.
Он совершенно прав.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: есть ли в С# аналог std::auto_ptr ?
От: _FRED_ Черногория
Дата: 08.06.11 08:10
Оценка: 1 (1) +1
Здравствуйте, WolfHound, Вы писали:

A>>>А вообще, using это каменный век по сравнению с работой деструкторов...

HL>>Толсто троллите.
WH>Он совершенно прав.

Что не отменяет трололо в сообщении :о)

Ведь утверждать то, что хотя бы для вас является прописной истинной (но не является для собеседника) и не дать хоть какого-то объяснения — чистой вода провокация.
Help will always be given at Hogwarts to those who ask for it.
Re[5]: есть ли в С# аналог std::auto_ptr ?
От: GlebZ Россия  
Дата: 08.06.11 09:34
Оценка:
Здравствуйте, WolfHound, Вы писали:

A>>>А вообще, using это каменный век по сравнению с работой деструкторов...

HL>>Толсто троллите.
WH>Он совершенно прав.
А точнее неправ. Иначе придется признать что Dispose является деструктором, что есть подлая ложь. Да и using не идеален. Я бы не отказался от расширения чтобы можно было вызывать не только Dispose. Что-то типа:
Stopwatch t=new Stopwatch();
using(t.Start())//указываем функцию начала
{
...
}(t.Stop());//указываем функцию завершения
Console.WriteLine(t.Elapsed);

Счас на таких задачах приходится Dispose прокси делать.
Re[6]: есть ли в С# аналог std::auto_ptr ?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 08.06.11 09:41
Оценка: 1 (1)
Здравствуйте, GlebZ, Вы писали:

Самый класс это WCF, где Close() и Dispose() не доно и то же. Вот там реальная потеха.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[4]: есть ли в С# аналог std::auto_ptr ?
От: catBasilio  
Дата: 08.06.11 10:08
Оценка:
Здравствуйте, HowardLovekraft, Вы писали:

HL>Здравствуйте, Aviator, Вы писали:


A>>А вообще, using это каменный век по сравнению с работой деструкторов...

HL>Толсто троллите.

буду признателен за пример на C# который реализует описаную мной в с++ном коде функциональность. А то пока не понимаю как это элегантно заимплементить.
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Re[5]: есть ли в С# аналог std::auto_ptr ?
От: _FRED_ Черногория
Дата: 08.06.11 10:14
Оценка:
Здравствуйте, catBasilio, Вы писали:

A>>>А вообще, using это каменный век по сравнению с работой деструкторов...

HL>>Толсто троллите.

B>буду признателен за пример на C# который реализует описаную мной в с++ном коде функциональность. А то пока не понимаю как это элегантно заимплементить.


Вы примеры про использование IDisposable посмотреть затруднились
Help will always be given at Hogwarts to those who ask for it.
Re[5]: есть ли в С# аналог std::auto_ptr ?
От: HowardLovekraft  
Дата: 08.06.11 11:09
Оценка:
Здравствуйте, catBasilio, Вы писали:

B>буду признателен за пример на C# который реализует описаную мной в с++ном коде функциональность

А вы приведете пример пример на C#, в котором выполняется явное уничтожение экземпляра reference-типа?
Re[3]: есть ли в С# аналог std::auto_ptr ?
От: Аноним  
Дата: 08.06.11 13:18
Оценка:
Здравствуйте, Aviator, Вы писали:

A>Здравствуйте, -MyXa-, Вы писали:


MX>>Здравствуйте, catBasilio, Вы писали:


B>>>собственно сабж. с помощью него в с++ очень удобно организовывать RAII. пример:


MX>>Краткое объяснение здесь

A>А вообще, using это каменный век по сравнению с работой деструкторов...

а пояснить примером можете?
желатеельно в сравнении
Re[4]: есть ли в С# аналог std::auto_ptr ?
От: -MyXa- Россия  
Дата: 09.06.11 11:11
Оценка:
Здравствуйте, Аноним, Вы писали:

A>>А вообще, using это каменный век по сравнению с работой деструкторов...


А>а пояснить примером можете?


Пример в первом сообщении этой ветки.

А>желатеельно в сравнении


Если бы было с чем сравнивать, вопроса у ТС не возникло бы.
Если не поможет, будем действовать током... 600 Вольт (C)
Re[5]: есть ли в С# аналог std::auto_ptr ?
От: drol  
Дата: 09.06.11 14:22
Оценка:
Здравствуйте, -MyXa-, Вы писали:

MX>Пример в первом сообщении этой ветки.


Отлично. Тогда покажите как на таком материале сделать обработку исключительных ситуаций\ошибок возникающих в ходе освобождения ресурсов. Для конкретности, пускай наш ресурс это распределённая транзакция
Re[6]: есть ли в С# аналог std::auto_ptr ?
От: Lloyd Россия  
Дата: 09.06.11 14:27
Оценка: +2
Здравствуйте, GlebZ, Вы писали:

GZ>Да и using не идеален. Я бы не отказался от расширения чтобы можно было вызывать не только Dispose. Что-то типа:

GZ>
GZ>Stopwatch t=new Stopwatch();
GZ>using(t.Start())//указываем функцию начала
GZ>{
GZ>...
GZ>}(t.Stop());//указываем функцию завершения
GZ>Console.WriteLine(t.Elapsed);
GZ>

GZ>Счас на таких задачах приходится Dispose прокси делать.

try {
  t.Start();
} finally {
  t.Stop();
}


Зачем что-то еще?
Re[7]: есть ли в С# аналог std::auto_ptr ?
От: catBasilio  
Дата: 09.06.11 17:33
Оценка: 1 (1) -1
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, GlebZ, Вы писали:


GZ>>Да и using не идеален. Я бы не отказался от расширения чтобы можно было вызывать не только Dispose. Что-то типа:

GZ>>
GZ>>Stopwatch t=new Stopwatch();
GZ>>using(t.Start())//указываем функцию начала
GZ>>{
GZ>>...
GZ>>}(t.Stop());//указываем функцию завершения
GZ>>Console.WriteLine(t.Elapsed);
GZ>>

GZ>>Счас на таких задачах приходится Dispose прокси делать.

L>
L>try {
L>  t.Start();
L>} finally {
L>  t.Stop();
L>}
L>


L>Зачем что-то еще?


в с++ за такой код полагается руки отрывать.
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.