我有以下兩類:初始化成員變量一旦
class foo{
public:
foo(){
Configuration config;
config.a=5;
config.b=5;
//...
config.z=5;
eng=Engine(config);
}
private:
Engine eng;
}
class Engine{
public:
Engine(){
//Very have model loading from hard disk is occurs here
//This loading is depend on the values of config
};
Engine(Configuration const& config):config(config){
//Very have model loading from hard disk is occurs here
//This loading is depend on the values of config
}
private:
Configuration config;
}
很明顯在foo
初始化eng
成員變量的方式constructor
是非常糟糕的監守eng
已被初始化兩次(這是非常昂貴)。爲了解決這個問題,我做了eng
爲unique_ptr
和使用std::make_unique
的foo constructor
在初始化一次:
class foo{
public:
foo(){
Configuration config;
config.a=5;
config.b=5;
//...
config.z=5;
eng=std::make_unique<Engine>(config);
}
private:
std::unique_ptr<Engine> eng;
}
這解決了不必要的初始化的問題。但是,我認爲我已經以錯誤的方式解決了這個問題。我看不出明顯的理由使用pointers
。我認爲stack member variables
有更好的解決方案。
問題是:是否應該儘量避免使用基於指針的解決方案?如果是的話,我的情況最好的解決方案是什麼?
編輯:
有人可能認爲簡單的解決辦法,我應該爲在engine
類config
一個setter
方法。所以,我可以在加載後進行設置。這不是一個選項,因爲加載過程取決於config
。所以如果我改變config
我應該再次加載。
也許'引擎(配置配置):配置(配置){'應該'引擎(常量配置和配置):配置(配置){性能 –
是的確定它是這樣的..我只寫這個代碼所以。謝謝 –
也許發佈你實際使用的代碼是更好的選擇,以獲得更多信息的答案 –