Это взорвало мой разум сегодня, пока я не понял это только компилирует с логическими параметрами.
#include <iostream>
using namespace std;
class Foo {
bool _param;
public:
Foo(bool param) {
_param = param;
}
void say() {
cout << "Param is "<< _param << endl;
}
};
int main() {
Foo foo = new Foo(true);
foo.say();
return 0;
}
Я также заметил, что конструктор вызывается дважды, тогда я предполагаю, что указатель, созданный «new Foo (true)», приводится к логическому значению. Это оно? Если так, то почему он не работает с другими типами параметров? Есть ли что-то еще, чего я не вижу?
Foo foo = new Foo(true);
эквивалентно
Foo foo(new Foo(true));
и результат указателя new
превращается в true
,
Вот почему он компилируется, и у вас есть утечка памяти.