I want to call different constructor of the same class depending on a run time condition. The constructor uses different initialization list (a bunch of things after :) so I can't process the condition within the constructor.
For example:
#include <vector>
int main() {
    bool condition = true;
    if (condition) {
        // The object in the actual code is not a std::vector.
        std::vector<int> s(100, 1);
    } else {
        std::vector<int> s(10);
    }
    // Error: s was not declared in this scope
    s[0] = 1;
}
I guess I can use pointer.
#include <vector>
int main() {
    bool condition = true;
    std::vector<int>* ptr_s;
    if (condition) {
        // The object in the actual code is not a std::vector.
        ptr_s = new std::vector<int>(100, 1);
    } else {
        ptr_s = new std::vector<int>(10);
    }
    (*ptr_s)[0] = 1;
    delete ptr_s;
}
Is there a better way if I didn't write a move constructor for my class?
An alternative solution is to create a class that the default contructor does not make the allocations, computing ( and all the hard job ) but instead, have one function for example initialize and overload it for each constructor type to do the real job. 
For example:
int main() {
    bool condition = true;
    SomeClass object;
    if (condition) {
        object.initialize(some params 1)
    } else {
        object.initialize(some params 2)
    }
}
Alternatively you may want the default constructor to do something meaningful in that case make a constructor that takes an object of a certain "dummy" type e.g. DoNothing and have instead:
 SomeClass object(DoNothing())
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With