C++ 通过指针更改 char* 类字段
c++ change char* class field by pointer
我有类员工
class Employee
{
public:
char* Name;
char* Position;
int Age;
Employee (const char *_name, const char *_position, int _age)
{
Name = new char[strlen (_name) + 1];
strcpy(Name, _name);
Position = new char[strlen (_position) + 1];
strcpy(Position, _position);
Age = _age;
};
~Employee ()
{
delete [] Name;
delete [] Position;
};
}
我想更改字段的值 位置 按指针 员工* p.
int main(void){
Employee first("Josh", "secretary", 33);
Employee *p;
p = &(first);
p->Position = "salesman";
}
是否可以以这种方式更改此值?我知道可以通过将 char* 更改为字符串来完成。我想我应该使用类运算符"->"或"="然后调整 char* 文件的大小并使用 strcpy 来更改值,但我不知道如何开始。
你可以这样做,但你会导致内存泄漏,因为你从来没有delete
旧的Position
。此外,由于析构函数delete[] Position;
,这将导致未定义的行为,因为Position
的值不再是动态分配的指针。
你应该提供一个成员函数来设置位置,然后它可以先释放之前的位置,并将新字符串复制到使用new
创建的动态内存中。
void Employee::setPosition(const char *new_position) {
delete[] Position;
Position = new char[strlen (new_position) + 1];
strcpy(Position, new_position);
}
如果你不想要一个新的成员函数,你必须在调用者中执行此操作:
delete[] p->Position;
p->Position = new char[sizeof "salesman" + 1];
strcpy(p->Position, "salesman");
不过,这将是一个糟糕的设计。使用类的目的是隐藏所有这些实现细节。理想情况下,像Position
这样的属性应该是private
成员,而不是public
,并且一切都应该使用成员函数完成。
相关文章:
- 将结构字段的类型展开为可变模板参数
- 将位字段导出到数组
- 为了方便起见,我应该避免公开私有字段变量吗
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 在java中读取c++字节的位字段
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 私有字段对象与私有继承?
- 声明没有默认构造函数的字段
- C++内存模型和位字段的最大序列
- 声明为无效的变量或字段'...' Ardunio 编译器上的错误
- 如何在QByteArray中放置和检索位字段而不会感到痛苦?
- 带有 char[] 字段的 POD 结构的 constexpr 构造
- 在这种情况下,如何从类型 "const char*" 初始化字段?
- 将包含位字段和动态数据的结构复制到 Char 数组缓冲区中
- C++ 通过指针更改 char* 类字段
- C MPI创建并发送具有字段char [16]和整数的结构数组
- 安全的方法来为char []字段创建Getter
- 对C++中的字节字段使用char*或void*或其他什么
- 字段具有不完整的类型 const char * []
- 在 C 中使用占位符设置字段宽度,并'char'