我有一个结构如下:
struct temp
{
char* person;
char* address;
int id;
int phone;
}
我有一个结构变量
temp var;
我希望在构造函数中初始化结构的成员,如:
Data ( )
{
var -> person = {};
var -> address = {};
var.id = 0;
var.phone = 0;
..............
}
人和地址是字符数组。
我不确定这是否是在C ++中初始化它们的正确方法。有什么建议吗?
答案 0 :(得分:3)
C ++中的正确方法是使用std::string
代替char*
。
struct temp
{
std::string person;
std::string address;
int id;
int phone;
}
此更改将确保自动管理字符串的资源。
如果必须使用C字符串作为学习练习的一部分,并且希望将它们初始化为空字符串(而不是NULL
指针),则可以使用运算符new[]
,如这样:
Data ( )
{
var -> person = new char[1];
var -> person[0] = 0;
var -> address = new char[1];
var -> address[0] = 0;
var.id = 0;
var.phone = 0;
}
如果你采用这种方法,你需要添加代码,一旦完成var
,就会取消分配内存,例如:
delete[] var -> person;
delete[] var -> address;
答案 1 :(得分:2)
如果要将指针字段设置为NULL
(或C ++ 11中的nullptr
),请尝试
var -> person = NULL;
如果要将其设置为文字常量字符串,请尝试类似
的内容 var -> person = "John Doe";
(如Paul R所述,将其设为std::string
)
更好的是,让你的struct temp
成为真实的class
,以便为它提供构造函数和析构函数。阅读Rule of three(在C ++ 11中,它正在成为五个规则)。
答案 2 :(得分:1)
我只是将它们设置为NULL。 在旁注,我无法帮助,但注意到你有var->和变种混合。如果你创建一个对象,它是[。]如果你引用一个指向基础对象的指针它是[ - >]。
typedef struct TTEMP
{
char* person;
char* address;
int id;
int phone;
}TTemp;
Data ( )
{
TTemp var;
var.person = NULL;
var.address = NULL;
var.id = 0;
var.phone = 0;
..............
}
答案 3 :(得分:1)
C ++中的struct(几乎)与类相同,但默认情况下所有成员都是公共的。 您也可以在构造函数中初始化。
struct temp
{
char* person;
char* address;
int id;
int phone;
temp():person(0),address(0),id(0),phone(0){}
}
temp t; // initialized!
如果由于某些原因你不想拥有构造函数,请创建一个工厂函数,它将封装成员的初始化并仅在那里创建实例。这实际上是C模仿构造函数的方式。
temp* create_my_temp()
{
temp *t;
//create using malloc or new
//initialize t;
return t;
}