【发布时间】:2018-06-22 05:52:54
【问题描述】:
我创建了一个成员变量(在Group 类中),它是一个向量(称为members,存储User(不同的类)类型的对象)的shared_ptr。这是成员变量定义(空):
std::shared_ptr <std::vector<User>> members = std::make_shared<std::vector<User>>();
为了从向量 (members) 中删除某个 User 对象,我在类 Group 中创建了一个成员函数 (remove)。它检查向量内的所有User 对象,当遇到正在查找的具有a.URI 值的对象时,它会擦除向量中该位置的对象。
void Group::remove(User a) {
for (auto i = 0; i < members->size(); i++){
if (a.URI == (*(members->begin()+i)).URI) members->erase(*(members->begin() + i));
}
这是我现在的remove 函数,但它不起作用。我检查了不同的配置,但无法使其工作。我的功能有问题吗?这个函数应该如何实现(shared_ptr 的特殊规则?)?有没有更好/最优的方法?
我认为这里不需要更多代码来解决我的问题。但是,对于那些想要 MCV 示例的人,我尝试写了一个 here(Ideone)。
【问题讨论】:
-
您的删除实现会跳过元素。最好改用
std::remove -
auto &vec = *members;怎么样,那么 vec 可以作为正则向量。请注意,无论你做什么操作,它都不是线程安全的。
标签: c++ class vector shared-ptr