আমি নিম্নলিখিত কোডটি লিখেছিলাম unique_ptr<Derived>
যেখানে unique_ptr<Base>
এটি প্রত্যাশিত হয় uses
class Base {
int i;
public:
Base( int i ) : i(i) {}
int getI() const { return i; }
};
class Derived : public Base {
float f;
public:
Derived( int i, float f ) : Base(i), f(f) {}
float getF() const { return f; }
};
void printBase( unique_ptr<Base> base )
{
cout << "f: " << base->getI() << endl;
}
unique_ptr<Base> makeBase()
{
return make_unique<Derived>( 2, 3.0f );
}
unique_ptr<Derived> makeDerived()
{
return make_unique<Derived>( 2, 3.0f );
}
int main( int argc, char * argv [] )
{
unique_ptr<Base> base1 = makeBase();
unique_ptr<Base> base2 = makeDerived();
printBase( make_unique<Derived>( 2, 3.0f ) );
return 0;
}
এবং আমি এই কোডটি সংকলন না করার প্রত্যাশা করেছি, কারণ আমার বোঝাপড়া অনুসারে unique_ptr<Base>
এবং unique_ptr<Derived>
অসম্পৃক্ত ধরণের এবং unique_ptr<Derived>
বাস্তবে উত্পন্ন নয় unique_ptr<Base>
যাতে অ্যাসাইনমেন্টটি কাজ না করে।
তবে কিছু জাদুতে এটি কাজ করে বলে ধন্যবাদ এবং আমি কেন বুঝতে পারি না বা এটি করা নিরাপদ থাকলেও। কেউ দয়া করে ব্যাখ্যা করতে পারেন?
Base
ভার্চুয়াল ডেস্ট্রাক্টর নেই।
unique_ptr
না হয় তবে উত্তরাধিকারের উপস্থিতিতে অকেজো হতে হবে