小编Niz*_*ias的帖子

在向量中使用共享指针时内存泄漏

在向向量添加共享指针时,我一直面临内存泄漏问题,向量定义如下:

vector<shared_ptr<Recipe>> favorites;
Run Code Online (Sandbox Code Playgroud)

(食谱是一个简单的类,有2个简单的字段)

以下函数用于向用户的收藏夹添加配方:

void User::postRecipe(string recipeName) {
    if (!(*this).isConnected())
        throw UserNotConnectedException();
    if (!(*this).isInGroup())
        throw NotInGroupException();
    shared_ptr<User> owner = server->seekUser((*this).getId());
    shared_ptr<Recipe> recipe(new Recipe(recipeName, owner));
    server->postRecipe((*this).groupName, recipe);
    if (!checkIfRecipeInFavs(favorites, recipeName)) {
        favorites.push_back(recipe);
}
Run Code Online (Sandbox Code Playgroud)

虽然程序编译并且程序的输出符合要求,但此函数的最后一行似乎会导致内存泄漏,如果删除它,错误就会消失.

有任何想法吗?提前致谢.

Recipe.h:

class Recipe
{
    string name;
    shared_ptr<User> owner;
public:
    Recipe(string name, shared_ptr<User> owner):name(name),owner(owner){};
    ~Recipe(){};
    string getName();
    shared_ptr<User> getOwner();
};
Run Code Online (Sandbox Code Playgroud)

Recipe.cpp:

string Recipe::getName(){
    return name;
}
shared_ptr<User> Recipe::getOwner(){
    return owner;
}
Run Code Online (Sandbox Code Playgroud)

c++ memory-leaks vector shared-ptr

2
推荐指数
1
解决办法
918
查看次数

标签 统计

c++ ×1

memory-leaks ×1

shared-ptr ×1

vector ×1