"operator char*"问题

Nep*_*ons 9 c++

下面的代码预计打印"​​kevin"但是,它的打印垃圾值.我已经检查了调试器."operator char*"调用返回的指针无效.任何的想法?

class Wrapper
{
private:
    char* _data;

public:

    Wrapper(const char* input)
    {
        int length = strlen(input) + 1;
        _data = new char[length];
        strcpy_s(_data, length, input);
    }

    ~Wrapper()
    {
        delete[] _data;
    }

    operator char*()
    {
        return _data;
    }
};

int main()
{
    char* username = Wrapper("kevin");
    printf(username);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

bsh*_*lds 15

问题是你的Wrapper对象被构造为临时对象并立即被破坏.通过operator char*你返回一个指向内存的指针,该Wrapper对象在被销毁时被对象删除.

为了使它工作:

Wrapper wrapper("Kevin");
char* username = wrapper;
Run Code Online (Sandbox Code Playgroud)

  • @ sankaran1984请他/她帮个忙,接受答案,这是左边的重要标记.= P (2认同)

小智 5

这一行:

char* username = Wrapper("kevin");
Run Code Online (Sandbox Code Playgroud)

创建一个无名的 Wrapper 对象,该对象立即被销毁,让您的指针指向任何内容。您需要为包装器对象命名,或者不编写那样的代码。这会起作用:

Wrapper w("kevin");
char* username = w;
printf( "%s", username );
Run Code Online (Sandbox Code Playgroud)