PDA

View Full Version : کتابخانه boost و اشاره گرها



Desaghi
شنبه 27 اردیبهشت 1393, 10:12 صبح
در مورد امکاناتی که کتابخانه boost در رابطه با اشاره گرها داره اگر توضیح بدین ممنون میشم


بطور مثال
boost::scoped_ptr

این مثال را از سایتش پیدا کردم ولی متوجهش نمیشم




#include <boost/scoped_ptr.hpp>
#include <iostream>

struct Shoe { ~Shoe() { std::cout << "Buckle my shoe\n"; } };

class MyClass {
boost::scoped_ptr<int> ptr;
public:
MyClass() : ptr(new int) { *ptr = 0; }
int add_one() { return ++*ptr; }
};

int main()
{
boost::scoped_ptr<Shoe> x(new Shoe);
MyClass my_instance;
std::cout << my_instance.add_one() << '\n';
std::cout << my_instance.add_one() << '\n';
}

کامبیز اسدزاده
شنبه 27 اردیبهشت 1393, 10:29 صبح
در رابطه با این مورد :


boost::scoped_ptr<int> ptr;


شیئ ptr از نوع integer در نظر گرفته شده که مثل int ptr میتونید درنظر بگیرید اینجا کاملا پویاست (و به صورت هوشمندانه عمل میکنه)

Desaghi
شنبه 27 اردیبهشت 1393, 10:49 صبح
فرق آن با int* ptr چیست؟

کامبیز اسدزاده
شنبه 27 اردیبهشت 1393, 11:37 صبح
فرق آن با int* ptr چیست؟شما چه از کتابخانه های پیشفرض استفاده کنید و چه از کتابخانه های boost در متغیر سازی فرقی نخواهد کرد مگر در موارد خاص (مثل مدیریت بهتر حافظه).

rahnema1
شنبه 27 اردیبهشت 1393, 12:31 عصر
سلام
اینها در قالب اشاره گر های هوشمند هستند یا smart pointer که در این تاپیک به اون اشاره شده:
http://barnamenevis.org/showthread.php?445901
همچنین در c++11 اشاره گرهای هوشمند قرار داده شده. از جمله اونها unique_ptr هست که میتونید به جای scoped_ptr کتابخانه boost استفاده کنید که قابلیت بیشتری هم داره
توی این مثال هم میخواسته بگه استفاده از اشاره گر هوشمند تضمین می کنه با از بین رفتن اشاره گر، اون شیئی که اشاره گر به اون اشاره می کنه هم از بین میره.
یعنی با اتمام تابع main تخریب کننده شیئی که توسط اشاره گر بهش اشاره میشه اجرا میشه اما اگه مثلا شما از یک اشاره گر معمولی به این صورت استفاده کنید که یک شیئ دینامیک درست کنید با اتمام تابع تخریب کننده اون شیئ صدا زده نمیشه

Shoe* myshoe = new Shoe;

مگه اینکه delete کنید