boost::shared_array<char const *> x(new char const *[n]);
В строке выше (n
целое число не больше 100) я создаю char const**
(const char**
) и помещаю его в интеллектуальный указатель x
для удаления массивов при x
удалено.И для меня ясно, как и почему эта работа.
boost::shared_array<char const *> x = new char const *[n];
Теперь давайте посмотрим на вторую строку.Здесь, на мой взгляд, мы делаем точно так же, как и в первом случае.Да, на первый взгляд может показаться, что здесь мы конструируем x через NULL
(значение по умолчанию параметра конструкторов shared_array), затем вызываем operator=
, но это ошибка, и, как я знаю, в этом случае вместо operator=
будет вызыватьсяconstructor
с указателем, созданным new opeartor
.
Но, несмотря на это, я получаю error C2440: 'initializing' : cannot convert from 'const char **' to 'boost::shared_array<T>
Единственная проблема, которую я вижу, это явный конструктор boost::shared_array<T>
.Но я не знаю, в чем проблема?Почему явный конструктор вызывает эту ошибку?И если проблема не в явном конструкторе, то где, почему?