【发布时间】:2018-06-24 14:01:33
【问题描述】:
我有类Employee 和派生类Worker 和Intern。我将它们存储在vector<shared_ptr<Employee>> Firm;中
我有:
void Promote(vector<shared_ptr<Employee>>& sourceEmployee) {
auto it = std::find_if(sourceEmployee.begin(), sourceEmployee.end(),
[&sourceEmployee, id](const auto &obj) { return obj->getID() == id; });
if (it != sourceEmployee.end()) {
auto index = std::distance(sourceEmployee.begin(), it);
switch(sourceEmployee[index]->getnum()) { // returning num / recognizing specified class obj
case 0: { // It's Intern, lets make him Worker
auto tmp0 = std::move(*it);
*it = std::make_shared<Worker>(*tmp0); // WORKING now
cout << "Employee " << id << " has been promoted" << endl;
break;
}
class Employee {
//basic c-tors etc.
protected:
int employeeID;
std::string Name;
std::string Surname;
int Salary;
bool Hired;
};
class Intern : public Employee {
protected:
static const int num = 0;
};
class Worker : public Employee {
protected:
static const int num = 1;
};
所以基本上我需要销毁Intern 对象并在同一个地方创建Worker。
编辑:已解决。我需要制作正确的构造函数并在tmp) 之前添加* ^_^
【问题讨论】:
-
假设你已经设法替换了你的对象。那么拥有
shared_ptr<Employee>有什么意义呢?每个拥有旧对象链接的人都将继续持有它。 -
我想我会通过调用
.reset()来阻止这种情况,不是吗? -
不,不会。
reset影响一个共享指针。 -
Worker::Worker(const Employee &)不是复制构造函数,它是一个以Employee为参数的普通构造函数。复制构造函数是Worker::Worker(const Worker &)
标签: c++ object vector replace shared-ptr