c++ - بداية - برنامج c




هل يقوم المنشئ الافتراضي الافتراضي بتهيئة المتغيرات إلى الصفر؟ (2)

أنا تحديث فئة إلى C ++ 14، ومحاولة لمعرفة أبسط طريقة لتهيئة كافة المتغيرات مثيل إلى صفر على البناء. وهنا ما لدي حتى الآن:

class MyClass {
public:
    int var;
    float* ptr;
    double array[3];
    MyStruct data;
    unique_ptr<MyStruct> smart_ptr;

    MyClass() = default;
    ~MyClass() = default;
}

هو تعيين منشئ إلى default ما يعادل القيام:

MyClass() : var{}, ptr{}, array{}, data{}, smart_ptr{} {}

... أو هل أحتاج إلى بدء كل متغير؟ (لقد حاولت على حد سواء في فيسوال ستوديو وأحصل على الأصفار في طريقي، ولكن أنا لست متأكدا مما إذا كان هذا حظا أم لا.)

أنا إنستانسينغ الطبقة دون أقواس: MyClass obj;


هو تعيين منشئ إلى الافتراضي ما يعادل القيام:

MyClass() : var{}, ptr{}, array{}, data{}, smart_ptr{} {}

لا ليست كذلك.

الخط

MyClass() = default;

هو أقرب إلى ولكن ليس بالضبط ما يعادل:

 MyClass() {}

في كلتا الحالتين، باستخدام

 MyClass obj;

النتائج في كائن افتراضي تم تهيئة أعضائه افتراضيا.

ومع ذلك، فإن الفرق بينهما عند استخدام

 MyClass obj{};

هو أن obj سيتم تهيئتها صفر مع منشئ الافتراضي الافتراضي في حين أنها ستظل الافتراضية الافتراضية مع المستخدم المقدمة منشئ الافتراضي.


لجعل جميع المتغيرات الخاصة بك صفرية على البناء، حتى لو لم الخالق لم يطلب ذلك، طريقة واحدة هي:

struct MyClassMembers
{
    int var;
    float* ptr;
    double array[3];
    MyStruct data;
    unique_ptr<MyStruct> smart_ptr;
};

struct MyClass : MyClassMembers
{
    MyClass(): MyClassMembers{} {}
};

ثم MyClass m; سوف تستخدم MyClassMembers{} لتهيئة الأعضاء.





c++14