powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Процедура удаления любого объекта
55 сообщений из 55, показаны все 3 страниц
Процедура удаления любого объекта
    #39097537
crush1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу сделать универсальную процедуру, которая удаляет любой объект и присваивает ему значение NULL.
Как делается обычно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
class A
{
public:
	A()
	{
		cout << "Create" << endl;
	}

	~A()
	{
		cout << "Destroy" << endl;
	}
};
.....
A *a = new A();
...
delete a;
a = NULL;



Вместо последних двух строк хочу иметь следующую функцию:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
void MyDeleteObject(LPVOID hObject)
{
	delete hObject;
	hObject = NULL;
}

A *a = new A();
MyDeleteObject(a);



Всё отрабатывает без ошибок, но вот только деструктор класса не вызывается. Как исправить ?
Я полагаю, что компилятор не понимает, что объект-указатель hObject относится к классу "A".
Возможен ли вообще такой подход ?
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097543
crush1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может завести ещё 1 параметр и в функцию передавать тип объекта ? А потом при удалении через какой-нибудь cast приводить к этому типу и удалять ?
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097545
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crush1Возможен ли вообще такой подход ?
MyDeleteObject должна быть template.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097559
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crush1,

Передавай не LPVOID, а какой либо прародитель XMyObject*, и виртуальный деструктор тебя спасет.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097560
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще можно сделать неправильно - макросом.
Шаблоном не очень хорошо - сгенерится своя функция для каждого типа.

Кроме того, нужно учитывать случай, когда у тебя массив объектов.
http://www.cplusplus.com/reference/new/operator delete []/
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097608
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
27.
28.
class Deletable{
public:
  virtual ~Deletable() = default;
};

class Point: public Deletable{
public:
    int x;
    int y;
    ~Point(){
        std::cout << "DELETING!" << std::endl;
    }
};

using dd = Deletable *;

void erase(dd &obj){
    delete obj;
    obj = nullptr;
}


int main() {
  Deletable *p = new Point;
  std::cout << p << std::endl;
  erase(p);
  std::cout << p << std::endl;
}
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097618
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗимарглШаблоном не очень хорошо - сгенерится своя функция для каждого типа.
И что тут плохого?
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097619
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyИ что тут плохого?
раздувание кода, разве это хорошо?
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097631
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHookAnatoly MoskovskyИ что тут плохого?
раздувание кода, разве это хорошо?монописуально. особенно в данном случае. А вот от лишней писанины избавит, и от ненужных бессмысленных наследований тоже.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097635
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychмонописуально. особенно в данном случае.
Особенно в данном?
crush1Хочу сделать универсальную процедуру, которая удаляет любой объект
В пессимистическом варианте вы получите вариант функции для всех классов использующихся в программе.
Ну вперёд, чо!
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097636
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если функция действительно нужна всем классам програмы, то ручное написание всех её вариантов, безусловно, круче шаблона ...
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097656
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHookНу вперёд, чо!функция то пипец огромная, 3 строчки, раздует код неимоверно Куда лучше не забыть все эти классы отнаследовать от Deletable. И потом долго медитировать, задлянафига это сделано вообще.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097674
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychFishHookНу вперёд, чо!функция то пипец огромная, 3 строчки, раздует код неимоверно Куда лучше не забыть все эти классы отнаследовать от Deletable. И потом долго медитировать, задлянафига это сделано вообще.
Наследование - основополагающий принцип ООП в С-подобных языках. Если задача решается без метапрограммирования, то её нужно решать без метапрограммирования. А если я забуду отнаследоваться от
Deletable, то получу ошибку компиляции.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097713
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHookраздувание кода, разве это хорошо?
Вы вообще видели объемы бинарников С++?
Там на мегабайты идет речь, а вы тут со своим раздутием на пару Кбайтов )))
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097716
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crush1,

только макросом\шаблоном со всеми вытекающими
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097724
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyраздутием на пару Кбайтов
пару килобайтов там, пару килобайтов сям, а потом сами же гундите на форумах "что ж за программы то пошли! Элементарная тулзовина полгигабайта отжирает! Вот в наше время в 64к умудрялись приличную игру засунуть! Совсем школота обленилась!"
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097760
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyЗимарглШаблоном не очень хорошо - сгенерится своя функция для каждого типа.
И что тут плохого?
Я не говорил, что плохо. Некрасиво.

К тому же ТС хочет чего то странного типа FreeAndNil, так что правильности построения я не советчик =)
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097829
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crush1хочу иметь следующую функцию:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
void MyDeleteObject(LPVOID hObject)
{
	delete hObject;
	hObject = NULL;
}

A *a = new A();
MyDeleteObject(a);



Всё отрабатывает без ошибок, но вот только деструктор класса не вызывается. Как исправить ?
Я полагаю, что компилятор не понимает, что объект-указатель hObject относится к классу "A".
Возможен ли вообще такой подход ?

Чтото мне подсказывает, что указатель a тут не изменится.

Должна быть функция MyDeleteObject( T ** p_hObject){ .... *p_hObject = NULL;

Не уверен, что будет работать грязный хак - приведение void ** p_hObject к произвольному классу, например к Deletable:

delete (Deletable *)(*p_hObject);
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097843
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crush1Хочу сделать универсальную процедуру, которая удаляет любой объект и присваивает ему значение NULL.
Как делается обычно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
class A
{
public:
	A()
	{
		cout << "Create" << endl;
	}

	~A()
	{
		cout << "Destroy" << endl;
	}
};
.....
A *a = new A();
...
delete a;
a = NULL;



Вместо последних двух строк хочу иметь следующую функцию:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
void MyDeleteObject(LPVOID hObject)
{
	delete hObject;
	hObject = NULL;
}

A *a = new A();
MyDeleteObject(a);



Всё отрабатывает без ошибок, но вот только деструктор класса не вызывается. Как исправить ?
Я полагаю, что компилятор не понимает, что объект-указатель hObject относится к классу "A".
Возможен ли вообще такой подход ?
да, все правильно.

нет, такой подход невозможен, указатель должен быть типизированным. поэтому функция должна быть шаблонной.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097844
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crush1Может завести ещё 1 параметр и в функцию передавать тип объекта ? А потом при удалении через какой-нибудь cast приводить к этому типу и удалять ?

тип нельзя передать как параметр.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097845
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗимарглЕще можно сделать неправильно - макросом.
Шаблоном не очень хорошо - сгенерится своя функция для каждого типа.

Кроме того, нужно учитывать случай, когда у тебя массив объектов.
http://www.cplusplus.com/reference/new/operator delete[]/


ну и пусть генерируется, она тут же заинлайнится.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097847
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHookegorychмонописуально. особенно в данном случае.
Особенно в данном?
crush1Хочу сделать универсальную процедуру, которая удаляет любой объект
В пессимистическом варианте вы получите вариант функции для всех классов использующихся в программе.
Ну вперёд, чо!


да и хрен с ним!
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097850
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
такая функция, разумеется, должна принимать ссылку на указатель, чтобы иметь возможность его обнулять.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097873
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivтакая функция, разумеется, должна принимать ссылку на указатель, чтобы иметь возможность его обнулять. В "советах" читал, что ссылки следует всегда делать константными. Это в духе C, где переменные передаваемые по значению не менялись. Синтаксически в C++ передача переменной по ссылке и по значению не отличаются.

Константная ссылка в C++ может принять временный объект или литерал, что расширяет область применения функции.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097874
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabВ "советах" читал, что ссылки следует всегда делать константными.

Либо это вредные советы, либо ты их неправильно читал. Константные ссылки используют
вместо передачи по значению для того, чтобы не создавать временные объекты и тратить время
на копи-конструктор.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097887
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHookAnatoly MoskovskyИ что тут плохого?
раздувание кода, разве это хорошо?

Что у вас за пренебрежительное отношение к обобщённому программированию. Использование макрофункций в С++ вообще нежелательно. В данном конкретном случае как минимум отсутствует проверка типов входных и выходных параметров функции, что приводит к потенциальным проблемам.

PS
Если не ошибаюсь даже просто макроимена(не макрофункции) в С++ нежелательно использовать. Это связано, как минимум, с возможными проблемами при отладке
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097911
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЧто у вас за пренебрежительное отношение к обобщённому программированию. Использование макрофункций в С++ вообще нежелательно. В данном конкретном случае как минимум отсутствует проверка типов входных и выходных параметров функции, что приводит к потенциальным проблемам.

PS
Если не ошибаюсь даже просто макроимена(не макрофункции) в С++ нежелательно использовать. Это связано, как минимум, с возможными проблемами при отладке

с чего вдруг она будет отсутствовать в шаблоне? даже жёстче чем в FreeAndNil дельфийском будет проверка типов

PPS: волков бояться, ...
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097914
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)SashaMercuryЧто у вас за пренебрежительное отношение к обобщённому программированию. Использование макрофункций в С++ вообще нежелательно. В данном конкретном случае как минимум отсутствует проверка типов входных и выходных параметров функции, что приводит к потенциальным проблемам.

PS
Если не ошибаюсь даже просто макроимена(не макрофункции) в С++ нежелательно использовать. Это связано, как минимум, с возможными проблемами при отладке

с чего вдруг она будет отсутствовать в шаблоне? даже жёстче чем в FreeAndNil дельфийском будет проверка типов

PPS: волков бояться, ...

вы меня не так поняли. или я неправильно пояснил. эта фраза относится к макрофункции аналогичной шаблону
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39097984
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHookЕсли задача решается без метапрограммирования, то её нужно решать без метапрограммирования.
ну, решите эту задачу для double * ))
PS какая-то религия запрещает метапрограммирование? Очень интересно. Можно поподробнее?
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098082
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovmcureenabВ "советах" читал, что ссылки следует всегда делать константными.

Либо это вредные советы, либо ты их неправильно читал. Константные ссылки используют
вместо передачи по значению для того, чтобы не создавать временные объекты и тратить время
на копи-конструктор.
Ссылки без const можно использовать ровно с той же целью. Тут суть не в оптимизации (к стати, если функции нужен инициализированный временный объект, то почему бы его не создать передавая параметр по значению), а в том чтобы программу было легче читать.

Для функций:
Код: plaintext
1.
2.
void f1(T x){...};
void f2(const T &x){...};



вызов выглядит одинаково:
Код: plaintext
1.
2.
f1(y);
f2(y);



Программист может ожидать, что и f1 и f2 не меняют y. Иного смысла в этом совете нет.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098173
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabТут суть не в оптимизации (к стати, если функции нужен инициализированный временный объект, то почему бы его не создать передавая параметр по значению), а в том чтобы программу было легче читать.мы вторую страницу обсуждаем мега-функцию, удаляющую свой входной параметр и присваивающий ему NULL. Можете пояснить, каким боком к этому обсуждению относятся константные ссылки?
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098279
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychmcureenabТут суть не в оптимизации (к стати, если функции нужен инициализированный временный объект, то почему бы его не создать передавая параметр по значению), а в том чтобы программу было легче читать.мы вторую страницу обсуждаем мега-функцию, удаляющую свой входной параметр и присваивающий ему NULL. Можете пояснить, каким боком к этому обсуждению относятся константные ссылки?

Тем боком, что тут нужна не ссылка на указатель, а указатель на указатель. Так будет легче читать программу.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098318
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabТем боком, что тут нужна не ссылка на указатель, а указатель на указатель.
Так будет легче читать программу.
Да ну? С какого это перепугу FreeAndNil(&var) читается легче чем FreeAndNil(var)?
Не говоря уже о возможности злоупотреблений типа FreeAndNil((void*)12345).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098340
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автору использовать шаблон unique_ptr и т.п. Smart Pointers.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098355
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabТем боком, что тут нужна не ссылка на указатель, а указатель на указатель. Так будет легче читать программу.легче читать программу будет, если перестать называть функции f1, f2, а давать им осмысленные имена, как справедливо отметил Dimitry Sibiryakov.
mcureenabАвтору использовать шаблон unique_ptr и т.п. Smart Pointers.нуууу так не честно! эта фраза была заготовлена на 4ю страницу обсуждения
тут люди загоняются на шаблон инлайн-функции из 2х строк, а вы им предлагаете полноценный шаблонный класс использовать, этож как код-то распухнет то у них, жуть же просто )))
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098382
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychmcureenabАвтору использовать шаблон unique_ptr и т.п. Smart Pointers.нуууу так не честно! эта фраза была заготовлена на 4ю страницу обсуждения Ой. Простите.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098428
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabMasterZivтакая функция, разумеется, должна принимать ссылку на указатель, чтобы иметь возможность его обнулять. В "советах" читал, что ссылки следует всегда делать константными.


Не в этом случае. Константные ссылки нужны когда объект по ссылке не меняется . В данном случае мы наоборот хотим его в функции менять.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098433
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychmcureenabТут суть не в оптимизации (к стати, если функции нужен инициализированный временный объект, то почему бы его не создать передавая параметр по значению), а в том чтобы программу было легче читать.мы вторую страницу обсуждаем мега-функцию, удаляющую свой входной параметр и присваивающий ему NULL. Можете пояснить, каким боком к этому обсуждению относятся константные ссылки?

Таким же, как и макросы. Никаким.

Искомая функция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
template <typename T, void* nullptr = static_cast<void*>(0)>
void Delete( T*& p )
{
  if( p != nullptr )
  {
     delete p;
     p = nullptr;
  }
}




(могу наврать со static_cast<void*>(0) )
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098541
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivegorychпропущено...
мы вторую страницу обсуждаем мега-функцию, удаляющую свой входной параметр и присваивающий ему NULL. Можете пояснить, каким боком к этому обсуждению относятся константные ссылки?

Таким же, как и макросы. Никаким.

Искомая функция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
template <typename T, void* nullptr = static_cast<void*>(0)>
void Delete( T*& p )
{
  if( p != nullptr )
  {
     delete p;
     p = nullptr;
  }
}


(могу наврать со static_cast<void*>(0) )

Да и nullptr тут тем же боком относится )))

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
template <typename T>
void Delete( T*& p )
{
  if( p )
  {
     delete p;
     p = nullptr;
  }
}
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098548
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyДа и nullptr тут тем же боком относится )))
if - тоже лишний.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098571
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAnatoly MoskovskyДа и nullptr тут тем же боком относится )))
if - тоже лишний.
По большому счету - да.))
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098590
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНе в этом случае. Константные ссылки нужны когда объект по ссылке не меняется . В данном случае мы наоборот хотим его в функции менять. Поэтому следует использовать указатель на указатель.
Стандартный delete не меняет сам указатель. А твой Delete меняет. Не гоже, чтобы они одинаково выглядели.
Код: plaintext
1.
2.
delete a;
Delete a;

Почему a обнулился? 8(
Код: plaintext
1.
2.
delete a;
Delete &a;

Тут все ясно. С самим a в Delete что то происходит.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098641
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyDimitry Sibiryakovпропущено...

if - тоже лишний.
По большому счету - да.))

По большому счёту и вся функция лишняя.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098644
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabMasterZivНе в этом случае. Константные ссылки нужны когда объект по ссылке не меняется . В данном случае мы наоборот хотим его в функции менять. Поэтому следует использовать указатель на указатель.
Стандартный delete не меняет сам указатель. А твой Delete меняет. Не гоже, чтобы они одинаково выглядели.
Код: plaintext
1.
2.
delete a;
Delete a;

Почему a обнулился? 8(
Код: plaintext
1.
2.
delete a;
Delete &a;

Тут все ясно. С самим a в Delete что то происходит.

Это уже давно никого не интересующие бредни, по-моему.
Абсолютная дурость.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098767
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabСтандартный delete не меняет сам указатель. А твой Delete меняет. Не гоже, чтобы они одинаково выглядели.ну назови её не Delete, а clean, erase, destroy или как там ещё, хоть destroy_and_null().
Советы они такие советы. Особенно когда они начинаются со слов "никогда" ))
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39098900
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivАбсолютная дурость.
она в изначальной постановке задачи - "Хочу сделать универсальную процедуру"
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39099121
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил, умников полно, ты бы человеку помог
мало ли как и что он назвал - процедура, макрос - понятно же что хочет

Код: plaintext
1.
  #define FreeAndNil(o)  {if (o) { delete o; o = NULL;}}



в дельфи правда ссылка сначала зануляется, а потом удаляется объект
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39099123
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Изопропил, умников полно, ты бы человеку помог
я и пытаюсь помочь - предлагаю дурью не маяться
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39099145
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилkealon(Ruslan)Изопропил, умников полно, ты бы человеку помог
я и пытаюсь помочь - предлагаю дурью не маяться
для тебя может дурь, для кого-то нужная вещь с гарантией нормальной работы и уж куда удобнее чем лапша if-ов в деструкторе в популярных книгах по С++

PS: я вот в питоне делал объект который вызывает исключение при любых операциях с ним, кроме присвоения. никому кроме меня такого не требовалось, а я дня два убил на чуть больше 200 строчек кода пока сделал, ладно подмогли иначе ещё бы неизвестно сколько делал
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39099222
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)для тебя может дурь, для кого-то нужная вещь с гарантией нормальной работы Никакой гарантии тут нет. Один указатель занулил, десять копий остались. Попытки удалить не динамический объект так же не исключены.

Было бы так все шоколадно, со всякими умными указателями не заморачивались.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39099274
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabkealon(Ruslan)для тебя может дурь, для кого-то нужная вещь с гарантией нормальной работы Никакой гарантии тут нет. Один указатель занулил, десять копий остались. Попытки удалить не динамический объект так же не исключены.

Было бы так все шоколадно, со всякими умными указателями не заморачивались.
человеку нужна простая вещь: создать объекты в конструкторе, удалить в деструкторе - один объект - один указатель
FreeAndNil - больше ни для чего не предназначен

другое дело, что в C++ при возникновении исключения в конструкторе не будет вызван деструктор как в дельфи
в конструкторе надо извращаться с отловом исключений что бы TObject повторить
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39099283
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)человеку нужна простая вещь: создать объекты в конструкторе, удалить в деструкторе - один объект - один указатель
FreeAndNil - больше ни для чего не предназначен
А смысл занулять указатели, когда весь объект уничтожается?
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39099332
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabА смысл занулять указатели, когда весь объект уничтожается?
обычно для отлова ошибок в логике используется, при вызове деструктора может куча кода вызываться в котором используется текущий объект
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39099485
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabkealon(Ruslan)человеку нужна простая вещь: создать объекты в конструкторе, удалить в деструкторе - один объект - один указатель
FreeAndNil - больше ни для чего не предназначен
А смысл занулять указатели, когда весь объект уничтожается?

Ну да, но -- привычка, как-то спокойнее.
В отледке, на самом деле, сильно помогает иногда.
...
Рейтинг: 0 / 0
Процедура удаления любого объекта
    #39099804
bengunn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenabkealon(Ruslan)человеку нужна простая вещь: создать объекты в конструкторе, удалить в деструкторе - один объект - один указатель
FreeAndNil - больше ни для чего не предназначен
А смысл занулять указатели, когда весь объект уничтожается?
Чтобы знать, что они не содержат адрес уже уничтоженного объекта?
...
Рейтинг: 0 / 0
55 сообщений из 55, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Процедура удаления любого объекта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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