Не может наследовать от auto_ptr без проблем - PullRequest
0 голосов
/ 26 мая 2010

Что я хочу сделать, это:

#include <memory>

class autostr : public std::auto_ptr<char>
{
public:
    autostr(char *a) : std::auto_ptr<char>(a) {}
    autostr(autostr &a) : std::auto_ptr<char>(a) {}
    // define a bunch of string utils here...
};

autostr test(char a)
{
    return autostr(new char(a));
}

void main(int args, char **arg)
{
    autostr asd = test('b');
    return 0;
}

(на самом деле у меня есть копия класса auto_ptr, которая также обрабатывает массивы, но та же ошибка относится и к stl)

Ошибка компиляции с использованием GCC 4.3.0:

main.cpp:152: error: no matching function for call to `autostr::autostr(autostr)'
main.cpp:147: note: candidates are: autostr::autostr(autostr&)
main.cpp:146: note:                 autostr::autostr(char*)

Я не понимаю, почему аргумент autostr не соответствует действительному параметру autostr (autostr &).

1 Ответ

1 голос
/ 26 мая 2010

autostr, возвращаемое функцией, является временным. Временные значения могут быть связаны только с ссылками на const (const autostr&), но ваша ссылка не является константной. (И «правильно».

Это ужасная идея, почти ни одна из стандартных библиотек не предназначена для наследования. Я уже вижу ошибку в вашем коде:

autostr s("please don't delete me...oops");

Что не так с std::string?

...