AMcoder - javascript, python, java, html, php, sql

Ե՞րբ պետք է օգտագործեմ նորը: [կրկնօրինակ]

Հնարավոր կրկնօրինակ՝
Երբ Պետք է օգտագործեմ նոր հիմնաբառը C++-ում:

Ես չգիտեմ գործի 1-ի և 2-րդ դեպքի տարբերությունը.

Ես սահմանում եմ կառուցվածքը ստորև.

struct Graph {
    int ID;
}

Դեպք 1:

Graph g;
g.ID = 1;

դեպք 2:

Graph* g = new G();
g.ID = 1;

Արդյո՞ք այս երկու դեպքերը նույնն են։ Որն է տարբերությունը?

c++
28.02.2012

  • Եթե ​​struct սահմանման վերջում ավելացվի ստորակետ, ապա 1-ին գործը կարող է կազմվել: 28.02.2012

Պատասխանները:


1

1-ի դեպքում g-ի օգտագործած հիշողությունը տեղաբաշխվում է ստեկի վրա, ինչը նշանակում է, որ այն ավտոմատ կերպով կազատվի, երբ իր մեջ գտնվող ֆունկցիան վերադառնա:

2-րդ դեպքում g-ի օգտագործած հիշողությունը հատկացվում է կույտին, ինչը նշանակում է, որ այն կազատվի միայն ջնջման օպերատորի միջոցով հստակ ջնջվելու դեպքում:

Բացի այդ, 2-ի դեպքում, քանի որ g-ը ցուցիչ է, դուք պետք է մուտք գործեք g-ի դաշտեր՝ օգտագործելով -> օպերատորը.

g->ID = 1;
28.02.2012

2

2-ի դեպքում դուք նկատի ունեք new Graph, ապա g->ID = 1: Փորձեք սկսել http://en.wikipedia.org/wiki/New_(C%2B%2B) Կարճ պատմություն, դեպքը 1-ը հատկացնում է հիշողությունը կոմպիլյացիայի ժամանակ, մինչդեռ 2-րդ դեպքը հատկացնում է այն գործարկման ժամանակ:

28.02.2012

3

Տարբերությունն այն է, թե որտեղ են բաշխվում տվյալները:

1-ին դեպքում ձեր Graph struct-ի տվյալները տեղաբաշխվում են կույտի վրա: Դուք մուտք եք գործում այն ​​«g» անունով:

2-րդ դեպքում ձեր Graph struct-ի տվյալները բաշխվում են կույտի վրա: Դուք մուտք եք գործում այդ տվյալների ցուցիչի միջոցով, որը պահվում է «g» անվան միջոցով:

28.02.2012

4

1-ի դեպքում դուք ստեղծում եք Graph-ը կույտի վրա՝ տեղական շրջանակում: Այսպիսով, այն ինքնաբերաբար կջնջվի, երբ շրջանակն ավարտվի: g, այսպիսով, այդ Գրաֆիկի իրական ցուցված տարբերակն է:

Երկրորդ դեպքում, դուք հատկացնում եք գրաֆիկը կույտին: g-ն այնուհետև միայն ցուցիչ է և չի ջնջվի, քանի դեռ դուք հստակ չեք դա անում:

28.02.2012
  • HEap-ը և Stack-ը այս համատեքստում օգտակար հասկացություններ չեն: Պայմանները, որոնք դուք փնտրում եք, automatic storage duration և dynamic storage duration են: Heap-ի և stack-ի խնդիրն այն է, որ ամեն ինչ շփոթեցնող է դառնում, երբ դուք ունեք դինամիկ կերպով տեղաբաշխված օբյեկտի անդամներ: Դինամիկորեն հատկացված օբյեկտն ունի dynamic storage duration, մինչդեռ նրա անդամները (եթե ոչ ցուցիչները) automatic storage duration են (չնայած անդամները գտնվում են կույտի վրա) և ճիշտ կմաքրվեն, երբ օբյեկտը ոչնչացվի: 28.02.2012
  • Իհարկե, դա այնքան էլ գործնական նշանակություն չունի, բայց երբ դուք ստանում եք այդ ծրագրավորման թեստերից մեկը աշխատանքի հարցազրույցի ժամանակ, նրանք անպայման կհարցնեն ձեզ, թե որն է տարբերությունը կույտի և կույտի միջև, ուստի պետք է նաև իմանալ: 28.02.2012
  • Այո, գիտության հիանալի բան է իմանալ (և դուք պետք է իմանաք տարբերությունը): Բայց դա մեզ-լիարժեք չէ C++ հասկացությունները բացատրելիս: 28.02.2012
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..