【发布时间】:2015-09-08 01:01:06
【问题描述】:
假设我有一堂课:
class Foo {
public:
int a;
}
该类通过new 运算符实例化,并由Bar 类的对象B 通过delete 运算符销毁。
如果是 Bar 类的对象 B,则实例化 Foo 类的新对象 A,然后将对象 A 的指针传递给 Baz 类的 C 对象。如果 Bar 类的对象 B 已被自我删除,那么 Baz 类的对象 C 如何检测对象 A 是否处于活动状态或已被删除。注意:这是在一个非常小的嵌入式系统上,因此不能使用任何库,甚至不能使用 std。请参见下面的序列图。
|------| |------|
| B:Bar| | C:Buz|
|------| |------|
|| |-------| ||
||---New--->| A:Foo | ||
|| |-------| ||
|| || ||
|| || ||
||-----C:Buz.set_foo_Ptr(&A:Foo);----->||
|| || ||
||---Delete--->X ||
|| ||
X (B:Bar Self Deleted) ||
||
(Can C:Buz know if A:Foo
has been deleted or not ?)
【问题讨论】:
-
似乎是
std::weak_ptr的好人选 -
我不知道标准是否说明了这种用法,但动态演员表会起作用(并且可靠)吗?
-
你需要它不被删除吗?还是删除可能没问题?
-
您的问题是您正在创建和分发指针,但没有一个实体负责销毁它们。这就是我们有 std::shared_ptr 和 std::weak_ptr 的原因。
-
这个Q有点像stackoverflow.com/questions/677653/…...,希望对你有帮助
标签: c++