عند استخدام make_shared
لإنشاء shared_ptr
للفئة vector
، يتم تمرير المعلمة المباشرة إلى البناء الموجود في الفئة vector
، والذي لا يحتوي على بناء يقبل قائمة المبادئ المباشرة {2, 3, 5, 8}
. بدلاً من ذلك، يمكن تمرير معلمة فارغة إلى make_shared
ثم استخدام دالة push_back
لإضافة القيم بشكل فردي، كما هو موضح في المثال التالي:
cpp#include
#include
#include
using std::cout;
using std::make_shared;
using std::shared_ptr;
using std::vector;
int main() {
shared_ptrint>> pointer = make_sharedint>>();
pointer->push_back(2);
pointer->push_back(3);
pointer->push_back(5);
pointer->push_back(8);
cout << (*pointer)[3]; // output: 8
return 0;
}
هذا المثال يستخدم make_shared
لإنشاء shared_ptr
فارغ، ثم يتم إضافة القيم إلى الفئة vector
باستخدام دالة push_back
بشكل فردي.
المزيد من المعلومات
عند استخدام make_shared
لإنشاء shared_ptr
، يتم تمرير المعلمة إلى بناء الفئة المحتواة (في هذه الحالة vector
)، وليس مباشرة إلى البناء المباشر للفئة. هذا يعني أن البناء المستخدم يجب أن يقبل المعلمات التي تم تمريرها إليه، وفي حالة vector
، فإن البناء المباشر للفئة vector
لا يقبل مثل هذه المعلمات.
بالإضافة إلى ذلك، يمكن استخدام make_shared
مع vector
ومعظم الفئات القياسية الأخرى التي تحتوي على بناء قبول معلمات المبادئ المباشرة، مثل std::string
، std::pair
، std::map
، وغيرها.