Конструктор не возвращает полезный объект

У меня проблема с конструктором, который работает не так, как я ожидал.

Если я попытаюсь инициализировать свой класс таким образом, он сработает, и я получу пригодный для использования объект :

vector<float> v;
MyClass<2> a(v);

Однако, если я попытаюсь создать класс, подобный приведенному ниже (который должен быть эквивалентен), результаты будут весьма неожиданными. При компиляции или запуске программы нет сообщения об ошибке / предупреждения. Но если вы попытаетесь использовать эту переменную где-нибудь и вызвать ее методы (например, a.doSomething ()), она выйдет из строя.

Я помещаю некоторый код в конструктор, чтобы уведомить меня, если он используется. Оказалось, что в этом случае код внутри конструктора на самом деле не выполнялся.

MyClass<2> a(vector<float>());

Поэтому мне интересно, почему это происходит? Является ли 2-е объявление незаконным?

РЕДАКТИРОВАТЬ: Я отправлю некоторый код класса

template <int x>
class MyClass {
public:
    vector<float> v;
    MyClass<x>(vector<float> v1) {
      v = v1;
    }

};
8
задан CB Bailey 19 March 2011 в 18:09
поделиться