【发布时间】:2013-03-13 03:31:14
【问题描述】:
我如何判断一个指针是 RValue 还是我不知道我在说什么。喝啤酒的时候,这个非常荒谬的想法突然出现在我的脑海里。
如果你有愚蠢的程序员/用户怎么办..
假设你有以下类:
template<typename T>
class Container
{
private:
std::vector<T> Storage;
public:
Container(T Anything) : Storage() {Storage.push_back(Anything);}
}
而用户这样做:
Container<Object*> C(new Object(Params));
那我怎么删除呢?我希望能够分辨出上面和下面的区别:
Object* O = new Object(Params);
Container<Object*> C(O);
我只是想知道。我知道显然不应该使用第一个示例,但让我们假设它将是或者我想检测这样的泄漏代码并删除它们。
如何做到这一点?那是一个 RValue 指针吗?我怎么称呼它?
【问题讨论】:
-
Container C(new Object(Params));是无意义的 - 你必须指定T是什么类型,那么,它是什么? -
在这种情况下,T 是一个指针。哦,你的意思是像 Container
-
哦……我修好了。对不起:(
-
@CantChooseUsernames: Read about expression value categories. 另外,这不是临时的。
-
指针是临时的,它指向的对象不是。这就是他似乎想在问题中谈论的内容,尽管他最近的评论似乎与这种解释相冲突。