因此,您有对象x
类型X
和对象y类型Y
。 X
和Y
是相关的,并且要求在其相关的x
之前销毁y
。编译时间寿命检查
换句话说,像这样:
struct X { void do_something(); }
struct Y
{
Y(X&x) : my_x(&x) {}
void do_something() { my_x->do_something(); }
private:
X * my_x;
};
被你想使用智能指针,上述my_x
防御程序员。但据我所知,没有合适的指针。这个指针需要知道它不拥有它的原始指针,并且它不应该超过它指向的对象。
我认为大多数情况下这是不可能在编译时显示的。然而,在某些情况下,可以证明y
不合适地超过其x
。
当你遇到这种情况,或者我们遇到一个运行时断言时,你能想出任何方法来创建编译时错误吗?
由于生命周期的范围不能通过静态分析来确定,很难想象编译时的执行。 – 2013-05-01 17:30:09
如果您需要序列化确保您的运行时尚未提供,请执行您自己的测序。 – jthill 2013-05-01 17:30:22
你是什么意思被销毁?你能否把'X'作为'Y'析构函数中的最后一个语句来销毁? – 2013-05-01 17:33:37