我正在阅读关于 rvalue 引用的教程/解释:
http://thbecker.net/articles/rvalue_references/section_07.html
在倒数第二段中,作者提到“factory 函数体内 T 的复制构造函数的参数是左值”。他所指的代码如下:
template<typename T, typename Arg>
shared_ptr<T> factory(Arg const & arg)
{
return shared_ptr<T>(new T(arg));
}
我知道
new T(arg)
会在堆上构造一个T对象,但是返回值不是一个临时指针值吗?如果不使用它(导致内存泄漏),那么它将丢失,因此是右值吗?编辑:为了澄清,我理解在这个例子中不会出现内存泄漏。我只是想说,如果指针值不被使用,我们就无法访问构造的T对象,因此会出现内存泄漏。
std::shared_ptr<T>
实际上为您提供了一个 _lvalue
_。 - πάντα ῥεῖnew
返回一个rvalue
,该值被复制到std::shared_ptr
的内部lvalue
中。 - Galiknew T(arg)
中的arg
,而不是整个表达式。arg
是一个左值。new T(arg)
是一个右值。 - Raymond Chenarg
。这与new
或shared_ptr
无关。 - Oktalist