我试图将一个值赋值给wstring指针,但是该值没有被分配;但是,当我将指针的创建和赋值分解为两行时,它可以工作。为什么会这样呢?
例如:
std::wstring* myString = &(L"my basic sentence" + some_wstring_var + L"\r\n");以上所述不起作用,但下文确实有效:
std::wstring temp = (L"my basic sentence" + some_wstring_var + L"\r\n");
std::wstring* myString = &temp;发布于 2013-11-26 20:17:16
在第一个示例中,您将获得临时地址。在该行执行完分配给wstring的myString对象之后,就不再可用了(顺便说一句,这些对象被称为rvalues )。我认为应该很明显,在第二个示例中,您有一个真正的对象(一个lvalue,只要它不超出作用域就有效。
为了克服这个限制,您可以直接在堆上创建一个wstring,这可能更适合您的情况,但是如果没有更多的信息,就很难说了:
std::wstring* myString = new std::wstring(L"my basic sentence" + some_wstring_var + L"\r\n");新创建的wstring将使用临时rvalue的内容进行初始化。只是别忘了在你完成指针之后销毁它。
有了C++11,事情就变得复杂了,因此出于性能原因,临时人员可以更频繁地重用。但是这个话题是非常的,而且将会超越这个问题。我只想提这件事,因为它可能也会影响到你。要想得到一个非常好的解释,请看一个这样的问题:What are move semantics?
发布于 2013-11-26 20:18:05
std::wstring* myString = &(L"my basic sentence" + some_wstring_var + L"\r\n");它指向一个临时对象,它的生命时间以分号结束,因此取消引用指针并使用它是未定义的行为。
std::wstring temp = (L"my basic sentence" + some_wstring_var + L"\r\n");
std::wstring* myString = &temp;它指向一个临时对象,但是生命时间更长,当该临时对象存在时,取消引用它是有效的。
发布于 2013-11-26 20:15:05
当然,您不能将字符串常量的入口(这就是&是什么)分配给变量。你想过了吗?指针指向哪里?
https://stackoverflow.com/questions/20227012
复制相似问题