ПредишенСледващото

(1) терминология. Имената на операторите са подвеждащи, но нов - е да се създаде обект. състояща се от разпределение на паметта и се обадете конструктор и изтриване - унищожи обекта, т.е. обадете се на деструктор и свободната памет. Обърнете внимание, да се разпределят и освобождават, вместо да изтривате.

(2) (Леко опростяване :) операция връща новата показалка стойност и показалеца изтриване операция извлича стойността. Моля, обърнете внимание - важно и в двата случая. Това означава, че по-специално, ако съхранявате указател към променливата, стойността на променливата няма да се промени, когато обектът се унищожава. Понякога болезнено и тъжно да си спомня.

(3) След изчистването на съдържанието на паметта на паметта непредсказуемо. По-специално, тя може да се използва повторно.

вътр * а = нов вътр # 40, # 41 ;;
* А = 5;
изтриете;

вътр * б = нов вътр # 40, # 41 ;;
* В = 3;
ФОРМАТ # 40; ".. а =, б =", * а * б # 41 ;;

вътр * а = нов вътр # 40, # 41 ;;
* А = 5;
изтриете;
изтриете;

Но има и по-интересни възможности:

вътр * а = нов вътр # 40, # 41 ;;
Int * б = с;
* А = 5;
изтриете;

Int * C = ново междинно съединение # 40, # 41 ;;
* C = 3;

Int * г = ново междинно съединение # 40, # 41 ;;
* D = 7;
ФОРМАТ # 40; ".. с = г =", * С * г # 41 ;;

Не е ясно, че в по невнимание е отстранен, и изглежда, че стойността на в себе си се е променило.


За случаи на тежка форма на затлъстяване (пълнота пълнота), снимка:

(1) нов и изтриване може да се замени, а не само за своите класове, но и в световен мащаб. Това е много често се използва в областта на вградените системи, където стандартната Alloc () / безплатно () не са налични или не желае (представете си ACS АЕЦ, което не е достатъчно памет!).

Но - хубаво - и може да се използва, за да се проследи улавяне / освобождаване на памет.

От друга страна, цялата тази бъркотия все още продължава да се освободи памет. Следователно, съдържанието на паметта може да се промени, когато свободна ().

(3) Всички тези "умни" указатели - са променливи. вместо стойности (smartptr PTR вместо T * PTR). По-специално, те автоматично ще обезсили съхранена стойност по време на освобождението. И вярвате или връзки, или не ви позволи да копирате указател. Строго погледнато, една нова / изтриване това се отнася косвено. И ще трябва да платите директно: в действителност умни указатели, както и в организирането на програмата около тях.

Защо, след като блок от паметта, показалеца на кото се отнася до, обозначени като свободна, този блок промени?


Реализация на компилатора, операционна система, архитектурата компютър.
Можете да се има предвид, че компилаторът е много тясно взаимодействие с операционната система, когато динамично разпределя памет. В действителност, той може да поиска то да се разпределят друг блок от памет за купчината, или да се върне освободеният блок към системата.

И където при всяко стартиране на програмата се променя на една и съща стойност (-572 662 307).


Тъй като системата ви всеки път, когато стартирате програмата "от нулата", с една и съща среда, поведението на операционната система, за монтаж кода на вашата програма в специален OS парче памет за вашата програма. Дори семето на ранда () е добре дефинирана стойност по подразбиране, което гарантира постоянна поредица от случайни числа, ако изведнъж ги използват, и това се прави умишлено - да се опрости отстраняване на грешки.
Но, като цяло, може да не е така.

Трябва да се разбере едно нещо - да се разбере как и какво се случва след премахването на обекта, към който точките показалеца, което означава, изберете отворен докрай, може би на вътрешната архитектура на процесора и команди лента. Не трябва да се занимавам с този въпрос, само ако не сте хакер. Програмистът трябва да се избегнат подобни ситуации като цяло.

CRaSHeR написал (а):

Това е много силно изявление. Правото не винаги и не е навсякъде. На първо място, а не на компилатора и библиотеката. На второ място, библиотеката не могат да взаимодействат с оста.


На първо място, аз съм напълно съгласен, че изчистване - функция библиотека.
На второ място, в моя пост там споделя моя приближение, но разумно приближение. Аз не мога да си представя как една библиотека не може да взаимодейства с модерна операционна система по време на работа с паметта. Опишете точно от двете възможности:
1. Предварително запазени някои ограничено количество памет за купчината и извън обхвата на тази програма не може да се измъкнем - изчистване връща NULL, когато иска повече памет, отколкото е налична в момента в купчината.
2. Налице е опит да се заемат цялата налична памет за програмата. Ами това е пълна глупост по дефиниция.

Така стигам до извода, че функциите на динамично разпределение на паметта и освобождаване на сегашния етап на развитие на компютърните технологии, просто трябва да работят в тясно сътрудничество с операционната система по този въпрос.

CRaSHeR написал (а):

Аз не знам много C ++ стандарт, така че не съм сигурен - дали по подразбиране нов изчистване () излъчване повикване () или не трябва.

CRaSHeR написал (а):

Просто знаят стандарта - това е един много специфични познания. Това е, без съмнение, разработчик трябва компилатор и библиотеки. А след това? Не знам. Познаването на стандарта език е необходимо в преносимите програми - има много различни компилатори.


Опитвам се да пиша преносим код първоначално, дори и ако в момента не се изисква в проекта. Просто във всеки един момент може да отнеме и нужда.
Разбира се, стандарти не са проучили дълбоко, много е забравена, но все пак, това е код преносимост сложи една от първите изисквания. В противен случай, ние се откаже от един от основните предимства на C / C ++ - неговите изпълнения на почти всички платформи. Тогава със сигурност би предпочел нещо по-красиво - Java napirimer за промоции. задачи - питон, PHP, Perl и т.н. и т.н.

Но всъщност не исках стандарти и C ++ на всички. Когато четете книга от Джеф Alger "на C ++", разбрах, че като наскоро заяви в Баче: "Знам, C ++, но аз не знам как да се пишат програми на нея."
Това може да се завинтва и завинтва разумно, че спира дъха. Използвайте много тънкости, че програмистите не използват почти никога (във всеки случай, моя опит, казва за него).

Ето защо аз си зададем въпроса - колко души общо ползване ООП / C ++, оперативни тенденции, които обществото за развитието на C ++ (или каквото и да се нарича) идва всяка година и оправдава?

Не мога да кажа за Borland'tsah - те Builder'e деактивирате тази наследството на VCL-клас (!). навсякъде също е нарушил принципа на капсулиране и т.н.

2. Налице е опит да се заемат цялата налична памет за програмата. Ами това е пълна глупост по дефиниция


Е, защо? Това е съвсем нормално стратегия за вградени системи. След или преди инициализация на ядрото (в зависимост от ядра), по време на работа се всички памет и контролира.

За нов - е операторът, чието поведение (подредена) трябва да остане предвидима и идентични в рамките на поне този компилатор, тя няма да се провежда при използване на F-II изчистване.


Защо? Защо той ще бъде непредсказуем?

в тази нова изчистване е по-добре, защото това дава възможност да се провери вида на


Това не е от съществено значение. От съществено значение е, че новият призовава строителя, и изчистване () - не. Сравнете с поставяне нов (заглавния файл на ).

очевидно е, че новото не може да взаимодейства с изчистване () - да ги използват в една програма е легитимно.

Това може да се завинтва и завинтва разумно, че спира дъха. Използвайте много тънкости, че програмистите не използват почти никога (във всеки случай, моя опит, казва за него).


Програмист (такива), използвайки езика (има такива) за решаване на проблема, винаги използвайте подмножество на езика. Както и на езика на писане е различен от обясненията в поставката на бира е различен от Одата на Владимир Владимирович ™.

Проблемите обикновено възникват, когато извън тази подгрупа са твърде големи парчета от език. В този случай, има несмилаеми съобщения за грешки ", не е ясно какво правят" части на програмата и т.н.

Подкрепете проекта - споделете линка, благодаря!