Потому что вы создаете три объекта.Ваш код содержит неявное преобразование из Data<float>*
в Data<void*>
через конструктор преобразования Data<void*>::Data(void*)
и эквивалентно
Data<void *> obj; // first object
Data<float> * temp = new Data<float>(31.34f); // second object
obj = Data<void *>((void*)temp); // third (temporary) object
Я понятия не имею, как этого избежать, потому что яПонятия не имею, что пытается сделать ваш код.Подобные странные преобразования можно предотвратить, объявив конструктор explicit
, чтобы он не допускал неявных преобразований.
Кроме того, любая книга, которую вы используете для изучения C ++, очень устарела.С 1998 года (и, возможно, ранее) стандартный заголовок ввода-вывода назывался <iostream>
без .h
, а все имена стандартных библиотек, такие как cout
, были в namespace std
.