【发布时间】:2026-02-14 03:35:01
【问题描述】:
我有一堂课:
class Kunde{
char *name;
char *ort;
int *alter;
double umsatz;
int transaktion;
int id=0;
int dummyAlter=20;
public:
static int anzahl;
Kunde(char* n=(char*)"Max Maier", char* o=(char*)"Köln", int *a=&dummyAlter);
Kunde(const Kunde &k);
~Kunde();
void buy(double u);
static int getAnzahl();
};
在我的 .cpp 文件中,我有:
Kunde::Kunde(char* n, char* o, int *a)
{
name=n;
ort=o;
alter=a;
id=anzahl++;
umsatz=0;
transaktion=0;
};
我想写一个复制构造函数。
这是通过以下方式实现的:
Kunde::Kunde(const Kunde &k)
{
int lenname=(int)strlen(k.name)+1;
name=new char[lenname];
memcpy(name, k.name, lenname);
int lenort=(int)strlen(k.ort)+1;
ort=new char[lenort];
memcpy(ort, k.ort, lenort);
alter=new int;
memcpy(alter, k.alter, sizeof(int));
id=k.id;
anzahl++;
umsatz=k.umsatz;
transaktion=k.transaktion;
}
代码编译得很好,但是当我执行它时,它会产生一个错误,我使用 memcpy 将数据从 k.alter 复制到 alter。
你看出哪里不对了吗?我尝试了 stfw 和 rtfm,但似乎我太愚蠢了,找不到任何关于“纯”int* 而不是 int*-Arrays 的内容。
感谢您的宝贵时间。
【问题讨论】:
-
您知道 C 风格的字符串比
strlen报告的字符多一个吗?字符串终止符'\0'。但我最大的问题是你为什么不使用std::string?那你就不用担心了! -
memcpy(alter, &k.alter, sizeof(int));中的&似乎不正确,如果您想复制k.alter指向的内容。无论如何,要复制一个int,普通的分配就可以了,你不需要memcpy。 -
顺便说一句,既然你只分配一个整数,为什么首先要使用指针呢?如果您想要多个整数,请使用
std::vector。 C++ standard library 包含很多东西,可以让你作为 C++ 程序员的生活变得更加简单和轻松。 -
哦,你绝对应该阅读一下the rule of three。
-
alter(即年龄)应声明为int,而不是int*。将其存储在其他位置是没有意义的。而且您绝对应该使用 std::string 来存储所有这些字符串,而不是手动将它们管理为 char 数组。