0

私がしたいのはこれです:

#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クラスにも当てはまります)

GCC4.3.0を使用したコンパイルエラーは次のとおりです。

main.cpp:152:エラー: `autostr :: autostr(autostr)'の呼び出しに一致する関数がありません
main.cpp:147:注:候補は次のとおりです:autostr :: autostr(autostr&)
main.cpp:146:注:autostr :: autostr(char *)

autostr(autostr&)の有効なパラメーターとしてautostr引数が一致しない理由がわかりません。

4

1 に答える 1

1

関数から返されるautostrは一時的なものです。一時値はreferences-to-const(const autostr&)にのみバインドできますが、参照はnon-constです。(そして「当然そう」。)

これはひどい考えであり、標準ライブラリのほとんどは継承されることを意図していません。私はすでにあなたのコードにバグを見ています:

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

何が問題なのstd::stringですか?

于 2010-05-26T05:08:05.630 に答える