非常抱歉这是一个基础问题,但我无法理解。我知道可以像这样初始化一个类:
QFile file("C:\\example");
但是如何从全局变量初始化它?例如:
QFile file; //QFile class
int main()
{
file = ?? //need to initialize 'file' with the QFile class
}
非常抱歉这是一个基础问题,但我无法理解。我知道可以像这样初始化一个类:
QFile file("C:\\example");
但是如何从全局变量初始化它?例如:
QFile file; //QFile class
int main()
{
file = ?? //need to initialize 'file' with the QFile class
}
如果该类可赋值/可复制构造,你只需要编写如下代码:
QFile file; //QFile class
int main()
{
file = QFile("C:\\example");
}
如果不行的话,你就得采用其他选项:
QFile* file = 0;
int main()
{
file = new QFile("C:\\example");
//
delete file;
}
或者使用boost::optional<QFile>
、std::shared_ptr<QFile>
、boost::scoped_ptr<QFile>
等。
由于静态初始化顺序问题,您可能需要编写以下函数:
static QFile& getFile()
{
static QFile s_file("C:\\example"); // initialized once due to being static
return s_file;
}
C++11使得函数局部静态变量的初始化也具有线程安全性(引用C++0x草案n3242,§6.7):
std::scoped_ptr
这样的东西,似乎你看起来像 30k 的先生 ;-) - Kerrek SB// file.cpp
QFile file("C:\\example");
int main()
{
// use `file`
}
main()
之前执行(析构函数反之)。#include <iostream>
struct QFile
{
char const* name;
QFile(char const* name) : name(name) {}
};
QFile file("test.dat"); // global object
int main()
{
std::cout << file.name << std::endl;
}
我知道你可以初始化一个类
你不能初始化一个类。你创建和初始化对象,而不是类。
完全由您决定是否使用全局变量或其他方法。
对于全局变量,您可以在文件中全局定义它,然后在函数中进行初始化,如下所示,请确保正确编写复制构造函数。
QFile file; //class object
int main()
{
file = QFile("C:\\example"); //create a temporary object and copy it to `file`
}
QFile *file;
int main()
{
file = new QFile("C:\\example");
}
static
变量。然后它仅限于文件本身。因此,您可以最小化全局变量的不良影响。