基于指针的程序的输出

Output of a pointer based program

本文关键字:程序 输出 指针 于指针      更新时间:2023-10-16

我在面试中被问到这个问题。我是C++的新手,这个程序编译成功。有人能告诉我这个程序到底是干什么的吗?

#include <iostream>
using namespace std;
class Student {
private:
char *name;
};
int main() {
Student *s = new Student();
Student s1 = *s;
Student s2;
s2 = s1;
delete s;
return 0;
}

对于没有用户定义的赋值运算符(复制构造函数)的类,编译器会生成默认的赋值运算符,通过简单的赋值来分配(复制)所有成员。因此,在学生的情况下,默认的operator=看起来像这样:

Student& operator=(const Strudent& rhs)
{
this->name = rhs.name;
}

复制构造函数时:

Student(const Student& origin)
: name(origin.name)
{
}

这意味着,就在这条线之前:

delete s;

CCD_1、ss1s2使它们的name指向完全相同的存储器位置。如果s在那里包含任何分配的数据,那么在s1delete之后使用它将导致灾难。

#include <iostream>

告诉编译器程序将使用库iostream 中定义的一些函数

using namespace std;

告诉编译器使用std命名空间。基本上,我们不再需要用这个命令在std命名空间中定义的函数之前写"std."。

class Student {
private:
char *name;
};

定义名为"Student"的新类,该类包含一个名为"name"的变量。"name"是私有的,因此只能由类的成员访问。"name"是指向字符的指针,因此可以用来指向字符数组。

int main()
{

开始定义主程序,我们程序的入口点

Student *s = new Student();

定义指向名为s的学生对象的指针。"new Student()"为Student对象分配内存。s存储所分配的存储器的地址。注意:s指向的Student类中的变量"name"未初始化。

Student s1 = *s;

定义一个新的学生对象s1,并通过复制s指向的学生对象对其进行初始化。s1中的变量"name"复制了s指向的Student类中变量"name’的值(未初始化!)。

Student s2;

定义一个新的Student对象s2。s2在默认情况下被初始化。

s2 = s1;

通过复制s1 初始化s2

delete s;

删除s 指向的内存空间中分配的学生对象

return 0;

通过向调用进程返回0来结束程序