سؤال

بعد القراءة هذه المقالة على مدونة Herb Sutter's، قمت بتجربة بعض الشيء وركضت إلى شيء ألغني. أنا أستخدم Visual C ++ 2005، لكنني سأفاجأت إذا كان هذا يعتمد على التنفيذ.

هنا هو رمزي:

#include <iostream>

using namespace std;

struct Base {
    //Base() {}
    ~Base() { cout << "~Base()" << endl; }
};

int main()
{
    const Base & f = Base();
}

عند تشغيل، يعرض "~Base()" مرتين... ولكن إذا قمت بالتعليق على المنشئ، فإنه يعرضه فقط بمجرد!

هل هناك تفسير لذلك؟

هل كانت مفيدة؟

المحلول

هذا هو التنفيذ يعتمد.

يسمح المعيار بنسخة تحدث عند ربط مؤقت إلى مرجع Const. في حالتك، يؤدي VC ++ نسخة فقط عندما يتم تعريف المنشئ بشكل ضمني. هذا غير متوقع، ولكن المسموح به.

C ++ 1X. سوف إصلاح هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top