boost::shared_array<char const *> x(new char const *[n]);
В строке выше (n
это целое число, не превосходящее 100) Я создаю char const**
(const char**
) и положить его на смарт-указатель x
для массивов, которые будут удалены при x
удаляется. И для меня ясно, как и почему эта работа.Почему явный конструктор boost :: shared_array вызывает ошибку?
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>
. Но я не знаю, в чем проблема? Почему явный конструктор вызывает эту ошибку? И если проблема не в явном конструкторе, то где, почему?