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

ارسال shared_ptr از کتابخانه به فایل اجرایی

0 امتیاز
سلام.فرض کنید من یک متغیر از نوع std::shared_ptr در کتابخانه تعریف کردم آیا این امکان وجود داره که متغیر مورد نظر را به فایل اجرایی انتقال بدم؟
سوال شده خرداد 6, 1399  بوسیله ی Alias (امتیاز 302)   3 24 31
سلام؛ خیلی منظورت ناواضح هست، یک مثال بزن از کاری که می‌خواید انجام بدید. یعنی چی که «متغیر مورد نظر رو به فایل اجرایی انتقال بدی» ؟

1 پاسخ

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

خوب اگر به صورت c++  قصد دارید expoert کنید مشکلی وجود نداره ولی اگر به صورت ansi c قصد دارید همچین کاری انجام بدید ، امکانش نیست بجز اینکه دو تا متد برای سازنده و مخرب بسازید و سمت کلاینت یا همون فایل اجرایی به قول خودتون ازش std::shared_ptr بسازید:

//server side
extern "C"{
    Foo* createObject(){
        return new Foo;
    }

    void freeObject(Foo* foo){
        delete foo;
    }


}


//client side

std::shared_ptr foo(createObject(),freeObject);

 

پاسخ داده شده خرداد 8, 1399 بوسیله ی farnoosh (امتیاز 8,362)   20 44 59
انتخاب شد خرداد 22, 1399 بوسیله ی مصطفی ساتکی
اینطوری با مشکل اشتباه شدن Reference count ممکنه که مواجه بشید، اون کلاس رو از std::enable_shared_from_this ارث‌بری کنید که بتونید سمت دیگه شئ std::shared_ptr رو Owner shipش رو داشته باشید.

اون بر می گرده به this ولی اینجا با this سروکار نداریم.به مثال زیر دقت کنید:

#include <iostream>
#include <memory>
using namespace std;

struct Foo{
   Foo(){
       cout << "Constructor" << endl;
   } 
   ~Foo(){
      cout << "Destructor" << endl; 
   }
};

Foo* createFoo(){
    return new Foo();
}
void freeFoo(Foo* item){
    if (item)
      delete item;
}

int main()
{
    auto ptr = createFoo();
    auto a = std::shared_ptr<Foo>(ptr,freeFoo);
    cout << a.use_count() << endl;
    auto b = a;
    cout << a.use_count() << endl;
    return 0;
}

 

...