Új hozzászólás Aktív témák

  • jattila48

    aktív tag

    válasz ToMmY_hun #2739 üzenetére

    Ha exceptiont dob a konstruktor, akkor nem jön létre az objektum (és így a destruktora sem fog meghívódni). A new lefoglalja a megfelelő tárhelyet, majd mikor a ctor exceptiont dob, fel is szabadítja azt. A factory függvényedben kell lekezelni az exceptiont, és NULL-t (vagy nullptr-t, vagy "üres" smart pointert) visszaadni, ha a konstruktor exceptiont dobott.

    class MyClass{
    ....
    };
    MyClass * factory(int arg){
    MyClass *p=NULL;
    try{
    p=new MyClass(arg);
    }
    catch(...){

    {
    return p;
    }

    Az egyszerűség kedvéért írtam raw pointer visszatérő értéket, igazából a factory fv.-nek inkább std::unique_ptr<MyClass> smart pointert célszerű visszaadni.
    Egyébként a paraméter ellenőrzést már a factory fv.-ben is elvégezheted, de akkor csak ezzel célszerű objektumot létrehozni, ctor közvetlen hívásával nem, mert az nem ellenőrzi a paramétereket. Ezt úgy lehet elérni, hogy a ctor-t protected-dé teszed, a factory-t pedig az osztály friend-jévé, vagy statikus tfv.-évé.

    MyClass * factory(int arg){
    if(arg>0){
    return new(std::nothrow) MyClass(arg);
    }
    else{
    return NULL;
    }
    }

Új hozzászólás Aktív témák

Hirdetés