چرا از new استفاده می کنیم ؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

چرا از new استفاده می کنیم ؟

+2 امتیاز

لطفا توضیحی راجع به وکتور هم بدن....

کلاس هایی برای شبیه سازی مفاهیم اولیه هندسی

در اینجا در  کلاس polygon قسمت polygon::polygon(point** arr,int size)    چه اتفاقی می افته؟ چرا اصن بفهمیم new میخواد. چرا ؟ کلا new کنیم چی میشه؟ چه موقع new میکنیم؟ارایه point** توش چیا قرار میگیرن؟

سوال شده اسفند 27, 1392  بوسیله ی programmer (امتیاز 139)   9 19 32
دوباره تگ گذاری شد فروردین 11, 1393 بوسیله ی BlueBlade

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

کلا new کنیم چی میشه؟ چه موقع new میکنیم؟

کاری که new می کنه اینه که زمان اجرا برای ما حافظه میگیره .

مشکلی که آرایه ها دارن اینه که سایزشون  رو شما قبل از اجرای کد میدین و در طول برنامه سایز ثابته ولی برای برنامه نویسی ما  اکثر اوقات نیاز به ساختار هایی داریم که زمان اجرا اندازشون کم وزیاد  بشه

برای نوشتن این ساختار ها از new و اشاره گر ها  استفاده می کنن.

بدون استفاده از new ساختار هایی مثل linkedlist و deque , ... رو اصلا نمیشه ساخت .

خود کلاس های ++C مثل همون vector , list ,... هم برای پیاده سازیشون از new استفاده شده .

new  یکسری کاربرد های دیگه هم داره مثلا زمان نوشتن برنامه های multi threading  هم به new احتیاج دارین و ...

 

به خاطر معایبی که new کردن داره که مهمترینش همون نیاز به delete کردن بعد از استفادست بهتره تا اون جایی که میشه ازشون استفاده نکرد .(در این مورد هم توی این لینک (آموزش اشاره گر ها )توضیج دادم )

 

همون تابع بالا که گفتین رو راه بهتر نوشتنش استفاده از vector دو بعدیه .

polygon::polygon(vector<vector<point>>)

 

در اینجا در  کلاس polygon قسمت polygon::polygon(point** arr,int size)    چه اتفاقی می افته؟

تنها اطلاعانی که کد بالا به ما میده اینه که یکی از ورودی های تابع  از نوع **point و اون یکی عدد  از نوع int هستش .

لزومی هم نداره که جتما ورودی تابع یک آرایه 2 بعدی باشه . توی همین لینکی که گذاشتید هم توضیح دادم .

برای درک بهتر مثال زیر رو در نظر بگیرید هر 3 حالت صحیح هستن .

یکبار تابع با اشاره گر به آدرس int صدا زده شده

یکبار با  آدرس آرایه 1 بعدی از int

یکبار با آرایه 2 بعدی از int

#include <iostream>
#include <vector>

void func(int **arr ,int size)
{
}

int main()
{
    int a;
    int *pointer_to_a = &a;
    func(&pointer_to_a ,1); //ok

    int *b = new int[10];
    func(&b,10);//ok

    int **c;
    c=new int*[6];
    for(int i=0;i<6;i++)
    {
        c[i]=new int[6];
    }
    func(c,6);//ok

}
پاسخ داده شده اسفند 27, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
ویرایش شده شهریور 8, 1393 بوسیله ی BlueBlade
...