use*_*090 2 c++ pointers wstring
我试图为wstring指针赋值,并且没有赋值; 但是,当我打破创建并将指针分配到两行时,它可以工作.为什么是这样?
例如:
std::wstring* myString = &(L"my basic sentence" + some_wstring_var + L"\r\n");
Run Code Online (Sandbox Code Playgroud)
以上不起作用,但下面的确有效:
std::wstring temp = (L"my basic sentence" + some_wstring_var + L"\r\n");
std::wstring* myString = &temp;
Run Code Online (Sandbox Code Playgroud)
在第一个示例中,您将获得临时地址.在该行执行之后,wstring
您指定的对象myString
不再可用(rvalue
顺便说一下,这些就是所谓的s).我认为很明显,在第二个例子中,你有一个真实的对象(lvalue
只要它没有运行任何范围,它就是有效的.
要使用范围克服此限制,您可以直接wstring
在堆上创建,这可能更好地适应您的情况,但没有进一步的信息,这很难说:
std::wstring* myString = new std::wstring(L"my basic sentence" + some_wstring_var + L"\r\n");
Run Code Online (Sandbox Code Playgroud)
新创建的wstring
将使用临时右值的内容进行初始化.完成之后,不要忘记销毁指针.
使用C++ 11时,事情变得复杂,因此出于性能原因,临时工具可以更频繁地重复使用.但是这个话题非常多,而且会超出这个问题.我只是想提一下,因为它可能会让你感到厌烦.对于一个非常好的解释,请看一下这个问题:什么是移动语义?