2012-01-26 19 views
5

Başlatıcı listesini kullanmak genelde teşvik edilir. Şimdi aşağıdaki kodu (örnegiydi sadece soru daha anlaşılır hale getirmek için) olduğunu varsayalım:Bir kurucunun başlatıcı listesinde akıl sağlığı kontrolü yapabilir miyim?

class foo 
{ 
    public: 
    foo(ptr1* a, ptr2* b) : m_a(a), m_b(b), m_val(a->val) {} 

    /* code and members here */ 
}; 

buna val almak KQUEUE çalışmadan önce a BOŞ olmadığını kontrol etmek istiyorum. Orada bir sağlık kontrolü yapmamın bir yolu var mı?

cevap

5

Use the ternary operator:

#include <cstdio> 

class Test 
{ 
    int x; 

public: 

    Test(int *px) 
    : x (px ? *px : -1) 
    { 
     printf("%d\n", x); 
    } 
}; 

int main(int argc, char *argv[]) 
{ 
    Test(NULL); 
    return 0; 
} 

Yukarıdaki örnek çıkışları -1.

+0

Bu yeterince iyi bir uzlaşma. Daha sonra assistanları yapıcı gövdesine koyabilirim ve aslında düzgün bir şekilde ateş edecekler. (1) – Samaursa

1

Deneyebilirsin: a==nullptr programlama mantığı bir hata olup olmadığını

foo(ptr1* a, ptr2* b) : m_a(a), m_b(b), m_val(a==nullptr ? 0 : a->val) {} 

Alternatif olarak, birim test etmek ayıklama kurar iken yakalamak için bir assert() kullanabilirsiniz.

+0

İyi öneriler! (+1) – Samaursa

İlgili konular