Ale*_*lex 1 c++ constructor initialization class
我有两节课,Foo和Bar.Bar包含一个实例Foo,需要初始化文件中的某些数据.初始化程序列表不应该没问题,因为在初始化时计算机还不知道分配了什么值Foo.
class Foo {
int x;
public:
Foo(int new_x) : x(new_x) {}
};
class Bar {
Foo FooInstance;
public:
Bar(const char * fileneme)
/* Auto calls FooInstance() constructor, which does not exist
Shoild I declare it to only avoid this error? */
{
/* [...] reading some data from the file */
// Init a new FooInstance calling FooInstance(int)
FooInstance = Foo(arg);
/* Continue reading the file [...] */
}
};
Run Code Online (Sandbox Code Playgroud)
创建一个新对象,初始化它然后FooInstance如源中所示复制它是一个不错的选择?
或者可能声明FooInstance为原始指针,然后用新的初始化它?(并在Bar析构函数中销毁它)
初始化最优雅的方法是FooInstance什么?
您可以使用委托构造函数(自C++ 11以来)和额外函数:
MyDataFromFile ReadFile(const char* filename);
class Bar {
Foo FooInstance;
public:
Bar(const char* fileneme) : Bar(ReadFile(filename)) {}
private:
Bar(const MyDataFromFile& data) : FooInstance(data.ForFoo)
{
// other stuff with MyDataFromFile.
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |