tag:blogger.com,1999:blog-10303035.post2913459548661966342..comments2024-02-04T23:20:04.066+03:00Comments on Алёна C++: Пост "Проблемы с delete[]"Alenahttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comBlogger13125tag:blogger.com,1999:blog-10303035.post-77531135612572763782010-07-13T00:31:58.343+04:002010-07-13T00:31:58.343+04:00glad18:
Здравствуйте Алёна!
Приветствую!
Прошу ...<b>glad18:</b><br /><br /><i>Здравствуйте Алёна!</i><br /><br />Приветствую!<br /><br /><i>Прошу прощения, я может быть один тут дурень такой, но чёт я не пойму в чём тут баг ?</i><br /><br />Посмотрите пост, на который я ссылаюсь: http://easy-coding.blogspot.com/2010/06/delete.html<br /><br />Там подробно объяснено что именно не так, а также почему в VC++ проблемы не видны.Alenahttps://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-79905104666285235682010-07-12T22:16:28.293+04:002010-07-12T22:16:28.293+04:00Здравствуйте Алёна!
Прошу прощения, я может быть о...Здравствуйте Алёна!<br />Прошу прощения, я может быть один тут дурень такой, но чёт я не пойму в чём тут баг ?<br /><br />Вот я написал: <br /><br />class A<br />{<br />public:<br /> A(): t(0) {};<br /> virtual ~A(){};<br /><br /> int t;<br /><br />};<br /><br />class B: public A<br />{<br />public:<br /> virtual ~B(){};<br />};<br /><br />void main()<br />{<br /> A* a = new B[3];<br /> a[1].t = 3;<br /> a[2].t = 5;<br /> delete[] a;<br />}<br /><br />всё прекрасно фурычит.. <br /><br />или я где-то допустил ошибку ? )Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-15856418537384561122010-06-18T19:51:58.743+04:002010-06-18T19:51:58.743+04:00Я бы использовала тут вектор, а не массив. jia3ep ...<i>Я бы использовала тут вектор, а не массив. jia3ep выше тоже на это намекнул...</i><br /><br />Всё равно тип элемента придётся делать указателем (пусть и "умным"). Так что, что вектор, что массив…<br /><br />vector<A*> v(T); v[1] = new B();<br />valarray<A*> x(T); x[1] = new B();<br />A **a = new (A*)[T]; a[1] = new B();<br /><br />// ...<br /><br />FOR_EACH_VECTOR_ITEM( v, item, if (item) { delete item; item = 0; } );<br />FOR_EACH_VALARRAY_ITEM( x, item, if (item) { delete item; item = 0; } );<br />FOR_EACH_ARRAY_ITEM( a, item, if (item) { delete item; item = 0; } );<br />delete[] a;Unknownhttps://www.blogger.com/profile/16462395178926581335noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-47553655250871793212010-06-18T19:37:16.221+04:002010-06-18T19:37:16.221+04:00Да уж. Хорошо было бы ввести аналог до-диезного ат...Да уж. Хорошо было бы ввести аналог до-диезного атрибута класса sealed (или const, как в Java, например; означает запрет наследования) и запретить подобное выражение для классов без этого атрибута.<br /><br />Шутка :) Там та-ка-а-я ниточка потянется…Unknownhttps://www.blogger.com/profile/16462395178926581335noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-54334895584817297152010-06-18T01:01:00.049+04:002010-06-18T01:01:00.049+04:00какбе, даже в Мейерсе написано, что так делать нех...какбе, даже в Мейерсе написано, что так делать нехорошо, а афтор - малолетний негодяй. см. "Never treat arrays polymorphically"Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-19768126068919997152010-06-12T04:45:17.254+04:002010-06-12T04:45:17.254+04:00Очевидно же.Очевидно же.NightmareZhttps://www.blogger.com/profile/09252312025546820621noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-74772896358362326702010-06-11T16:28:49.467+04:002010-06-11T16:28:49.467+04:00А всё потому, что нету отдельных типов "указа...А всё потому, что нету отдельных типов "указатель на массив", которые было бы запрещено приводить друг к другу.<br />Интересно, как с сабжем в ди?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-81004787931709519252010-06-11T12:09:15.657+04:002010-06-11T12:09:15.657+04:002huita:
В обсуждении так и не написали, как испра...<b>2huita:</b><br /><br /><i>В обсуждении так и не написали, как исправить код, чтобы избежать сегфола.</i><br /><br />Я бы использовала тут вектор, а не массив. jia3ep выше тоже на это намекнул...Alenahttps://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-43348308617887171412010-06-11T01:34:18.484+04:002010-06-11T01:34:18.484+04:00В обсуждении так и не написали, как исправить код,...В обсуждении так и не написали, как исправить код, чтобы избежать сегфола.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-76219583100729832362010-06-11T00:13:49.879+04:002010-06-11T00:13:49.879+04:00Нафик использовать сишные массивы с С++ классами, ...Нафик использовать сишные массивы с С++ классами, да ещё с полиморфизмом? При смешивании всегда возникают проблемы.Kirill V. Lyadvinskyhttps://www.blogger.com/profile/03118738824565485127noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-50550641188275113002010-06-10T19:09:59.069+04:002010-06-10T19:09:59.069+04:00http://easy-coding.blogspot.com/2010/06/delete.htm...http://easy-coding.blogspot.com/2010/06/delete.html?showComment=1276182441327#c1419027836280113277Unknownhttps://www.blogger.com/profile/07861391108370568285noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-6331612078024417562010-06-10T18:44:59.469+04:002010-06-10T18:44:59.469+04:00Как обычно, нормальные ОС + IDE этой проблемой не ...Как обычно, нормальные ОС + IDE этой проблемой не затронуты: в мире Windows всё работает.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-51173985512334669282010-06-10T18:38:50.849+04:002010-06-10T18:38:50.849+04:00Ccылка на блог Раймонда Чена в одном из комментари...Ccылка на блог Раймонда Чена в одном из комментариев [http://blogs.msdn.com/b/oldnewthing/archive/2004/02/03/66660.aspx], где обсуждается схожий вопрос, даже более интересна для изучения чем исходный постAlexei Eskenazihttps://www.blogger.com/profile/00108194206774574815noreply@blogger.com