将本地创建的对象放入std :: map是否正确?

时间:2014-06-25 08:09:23

标签: stack copy-constructor local-variables stdmap

我在std::map课程中有一个Driver,就像这样

std::map<int, dtp::driver_core::worker_record::WorkerRec> workers;

WorkerRec是一个单独的类,并具有以下构造函数。

WorkerRec::WorkerRec(const std::shared_ptr<TaskCore> task, 
                     const std::string & hostname,
                     const std::string & pid):
    worker_task(task),
    worker_hostname(hostname),
    worker_pid(pid)
{
}

我在班级Driver

中也有成员函数
int DriverCore::register_worker(const std::string & hostname, const std::string & pid)
{
.......................................................
.......................................................
WorkerRec w(task, hostname, pid);
workers[key] = w;
.......................................................
.......................................................
}

将本地创建的对象放入std :: map(workers[key] = w)或std :: map复制对象并且没有问题是正确的吗?

1 个答案:

答案 0 :(得分:0)

编写的代码没有问题。地图将创建w的副本。

如果您想自己验证这一点,可以将工作图从类中传递到其他范围,调用WorkerRec析构函数,并验证地图内容是否仍然有效。

如果你有地图存储指针指向本地拥有的数据,那么你只会遇到问题。