【发布时间】:2013-01-15 01:39:24
【问题描述】:
我设计了一些类。是这样的:
-
ClientEntity类可以有多个实例。 -
ClientEntity对象创建时不会被修改,所以我不使用互斥体。 -
ClientEntity对象可以在不同线程之间访问。 -
ClientEntity对象在收到一些退出命令时会被销毁。 -
ClientEntity对象可能会被某些线程访问。
我怎样才能安全地销毁这个对象?
class ClientEntity
{
public:
conference_info & conf_info (){return conf_info_;}
void conf_info(const conference_info &ci){conf_info_ = ci;}
user_info & usr_info(){return usr_info_;}
void usr_info(const user_info &ui){usr_info_ = ui;}
private:
web_conf_info *wci_;
user_info usr_info_;
conference_info conf_info_;
// .....
};
class user_info
{
public:
user_info & operator = (const user_info &ui)
{
if (this != &ui){
user_id = ui.user_id;
user_name = ui.user_name;
user_role = ui.user_role;
}
return *this;
}
public:
int user_id;
int user_role;
std::string user_name;
};
class conference_info
{
public:
conference_info & operator = (const conference_info &conf)
{
if (this != &conf){
conf_id = conf.conf_id;
dtsip_list = conf.dtsip_list;
ctsip_list = conf.ctsip_list;
}
return *this;
}
public:
int conf_id;
std::list<std::string> dtsip_list;
std::list<std::string> ctsip_list;
};
【问题讨论】:
-
根据您发布的使用案例的定义,“安全”销毁对象的唯一方法是确保该特定实例不会/不会再次发生使用。 IE。在你吃之前,没有一根线在馅饼里有突出的手指。
-
shared_ptr是你的朋友。或者,如果对象不是太大且不可变(即不能按您所说的那样修改),请复制它们。
标签: c++