Mi piacerebbe mantenere MyClass nella memoria dello stack (più semplice, più veloce) nel codice seguente, ma evitare di chiamare il costruttore di default:allocare memoria sullo stack senza chiamare il costruttore
#include <iostream>
class MyClass {
public:
MyClass() {
std::cout << "MyClass()" << std::endl;
}
MyClass(int a) {
std::cout << "MyClass(" << a << ")" << std::endl;
}
MyClass(const std::string& a) {
std::cout << "MyClass(\"" << a << "\")" << std::endl;
}
void doStuff() {
std::cout << "doStuff()" << std::endl;
}
};
int main(int argc, char* argv[]) {
bool something;
if (argc > 1)
something = 1;
else
something = 0;
MyClass c;
if (something)
c = MyClass(1);
else
c = MyClass("string");
c.doStuff();
return 0;
}
Per quanto ne so , l'unico modo per evitare di chiamare il costruttore predefinito sarebbe quello di usare un puntatore, ma poi dovrei allocare nell'heap e gestire la gestione della memoria. C'è un altro modo?
forse si potrebbe sottoclasse e sovrascrivere il costruttore di default e l'abbiano in essere un no-op? – nielsbot
In questo caso particolare, l'operatore ternario può essere utile. –
@Benjamin: l'operatore ternario non funzionerà perché i risultati sono di due tipi diversi. – Cameron