C++ 如何只删除一次指针?

C++ 如何只删除一次指针?,c++,C++,问题是:如何设计析构函数以便只删除一次反应?这有什么问题: enum Reaction{single,chain}; class X { X* parent_; X* left_; X* right_; Reaction* reaction_;//this pointer points from every obj to the same place, cannot be static }; 或者,也许我没有完全理解你的问题 这有什么问题: enum Reaction{single,chai

问题是:如何设计析构函数以便只删除一次反应?

这有什么问题:

enum Reaction{single,chain};

class X
{
X* parent_;
X* left_;
X* right_;
Reaction* reaction_;//this pointer points from every obj to the same place, cannot be static
};

或者,也许我没有完全理解你的问题

这有什么问题:

enum Reaction{single,chain};

class X
{
X* parent_;
X* left_;
X* right_;
Reaction* reaction_;//this pointer points from every obj to the same place, cannot be static
};

或者,也许我没有完全理解你的问题

在对象中使用
boost::shared_ptr
在对象中使用
boost::shared_ptr
三个即时想法:

1) 反应必须由类X的实例拥有吗?它不能由外部实体拥有,这样就没有X::~X需要删除它了吗

2) 使用boost::shared\u ptr

3) 使用静态int实现您自己的引用计数。如果您是多线程的,请记住锁定。

三个直接的想法:

1) 反应必须由类X的实例拥有吗?它不能由外部实体拥有,这样就没有X::~X需要删除它了吗

2) 使用boost::shared\u ptr


3) 使用静态int实现您自己的引用计数。如果您是多线程的,请记住锁定。

使用
boost::shared_ptr
std::shared_ptr
(c++0x)。它只在需要时计算引用并调用delete。

使用
boost::shared_ptr
std::shared_ptr
(c++0x)。它将计算引用数,并仅在需要时调用delete。

“//此指针从每个对象指向同一位置,不能是静态的”@Fred Nurk:表示X的每个对象都具有相同的
反应实例\u
?不,如果每个实例共享相同的反应,则表示反应是静态的。显然,每个对象的reaction_u成员都有一个相同的值。(我也不明白为什么会这样,就像我很少理解这张海报中任何问题的价值一样,但显然是这样。)@Fred:如果每个对象的反应成员都有相同的价值,那么我不明白问题出在哪里<代码>反应\是一个指针,因此来自X的所有对象的所有不同指针可能指向相同的值@纳瓦兹:当一个X被销毁,使用delete,然后另一个X被销毁,并试图对一个具有刚刚删除的相同值的指针使用delete时会发生什么?//这个指针从每个obj指向同一个位置,不能是静态的“@Fred Nurk:意味着X的每个对象都有相同的
反应的实例”
?否,如果每个实例都共享相同的反应,那就意味着反应是静态的。显然,每个对象的reaction_u成员都有一个相同的值。(我也不明白为什么会这样,就像我很少理解这张海报中任何问题的价值一样,但显然是这样。)@Fred:如果每个对象的反应成员都有相同的价值,那么我不明白问题出在哪里<代码>反应\是一个指针,因此来自X的所有对象的所有不同指针可能指向相同的值@纳瓦兹:当一个X被销毁,使用delete,然后另一个X被销毁,并试图对一个指针使用delete,该指针的值与刚才删除的值相同时,会发生什么?