首页 > 解决方案 > 如何在 C++ 中正确实现 addObject() 函数?

问题描述

我是这个网站的新手。
如果有人问过这个问题,我很抱歉,但我找不到任何问题/解决方案来回答我的问题,因为我认为这是一个非常具体的问题。
所以我一直在学习如何在 C++ 中使用 SFML 创建游戏引擎,我有一个关于如何实现 addObject() 函数的问题,该函数在被调用时创建一个对象,该对象被添加到类中的对象向量中一种优化的方式。
这是我的尝试:
Object.h

class Object{
private:
    string m_Type;
    string m_Action;
    int m_PositionX;
    int m_PositionY;

public:
    Object(string type, string action, int positionX, int positionY){
        m_Type = type;
        m_Action = action;
        m_PositionX = positionX;
        m_PositionY = positionY;
    }

};

ListOfObjects.h(addObject() 函数所在的位置)

class ListOfObjects{
private:
    vector<unique_ptr<Object>> m_Objects;

public:
    void addObject(string type, string action, int positionX, int positionY){
        m_Objects.push_back(move(make_unique<Object>(type, action, positionX, positionY)));
    }
};

现在这工作正常,但我认为可能有更好的方法来实现它。
我有这个想法的原因是,当我尝试更改Object类的构造函数时,假设我想再添加一个参数(例如Object(std::string m_Type, std::string m_Action, int PositionX, int PositionY, int Scale);),现在我还需要更新addObject(...)函数的参数以及在我调用该make_unique函数的代码行以下。这是很多工作(或者不是,我真的不知道,我还是个初学者,哈哈)。所以我想我可以让addObject(...)一个临时对象而不是参数列表来匹配Object类本身的构造函数吗?
ListOfObjects.h

class ListOfObjects{
private:
    std::vector<std::unique_ptr<Object>> m_Objects;

public:
    void addObject(Object object){
        m_Objects.push_back(move(make_unique<Object>(object)));
    }
};

现在,每当我需要更改Object类的构造函数时,我都不需要更新 addObject(...) 函数。但是现在,我需要Object像这样添加:

int main(){
    addObject(Object("name", "action", 100, 50));
    //and then a lot of random errors associated with memory and pointer stuff :(
    return 0;
}

我实际上试图实现这一点,但只有很多错误,我的小脑袋无法理解出了什么问题。我不知道将临时对象传递给函数是否是一项昂贵的操作。我应该像这样传递临时对象的引用吗?addObject(Object& object)

所以主要的问题是:
有没有更好的方法来实现这个函数来添加一个对象,这样向构造函数添加更多参数Object不需要我更新addObject(...)函数?

任何帮助将非常感激!(抱歉这么长的问题:<)

标签: c++optimizationdesign-patternsimplementation

解决方案


推荐阅读