我可以在析构函数中使用头文件中未定义的变量吗?
Can I use a variable in destructor that is not defined in the header file?
我一直在从我的 class 中阅读这段代码。并且对析构函数中的一个变量感到非常困惑。这是代码,顺便说一句,这是一个链表头文件。我认为未定义但使用的变量是 n;
#include <iostream>
using namespace std;
class LinkedList
{
private:
struct node
{
int info;
node * next;
};
typedef node * nodeptr;
nodeptr start;
int count;
public:
// Constructor
LinkedList()
{
start = NULL;
count = 0;
}
// Destructor
~LinkedList()
{
nodeptr p = start, n;
while (p != NULL)
{
n = p;
p = p->next;
delete n;
}
}
这个n第一次出现是来自行
nodeptr p = 开始, n;
所以请教我为什么这样使用变量是合法的。任何命令表示赞赏。
谢谢
不,已经定义了。
nodeptr p = start, n;
定义了 2 个变量,p
和 n
。而p
是由start
初始化的,而n
则不是。
在 C++ 语言中(就像在 C 中一样)每个声明可以包含多个声明符。例如
int a, b, c;
声明(并定义)三个变量:a
、b
和 c
类型 int
。您可以选择向某些声明符(或所有声明符)添加初始值设定项
int a = 5, b, c;
你的
nodeptr p = start, n;
完全一样。它声明(并定义)两个变量:p
和 n
。 p
有一个初始值设定项,n
没有。所以,你断言 n
是 "not defined" 显然是不正确的。
在一行代码中声明多个变量是完全合法的。但是请注意,在您的示例中,start 和 n 都是 nodeptr 类型。但是你不能有这样的东西:
int a, float b, double c; //这是非法的
我一直在从我的 class 中阅读这段代码。并且对析构函数中的一个变量感到非常困惑。这是代码,顺便说一句,这是一个链表头文件。我认为未定义但使用的变量是 n;
#include <iostream>
using namespace std;
class LinkedList
{
private:
struct node
{
int info;
node * next;
};
typedef node * nodeptr;
nodeptr start;
int count;
public:
// Constructor
LinkedList()
{
start = NULL;
count = 0;
}
// Destructor
~LinkedList()
{
nodeptr p = start, n;
while (p != NULL)
{
n = p;
p = p->next;
delete n;
}
}
这个n第一次出现是来自行
nodeptr p = 开始, n;
所以请教我为什么这样使用变量是合法的。任何命令表示赞赏。
谢谢
不,已经定义了。
nodeptr p = start, n;
定义了 2 个变量,p
和 n
。而p
是由start
初始化的,而n
则不是。
在 C++ 语言中(就像在 C 中一样)每个声明可以包含多个声明符。例如
int a, b, c;
声明(并定义)三个变量:a
、b
和 c
类型 int
。您可以选择向某些声明符(或所有声明符)添加初始值设定项
int a = 5, b, c;
你的
nodeptr p = start, n;
完全一样。它声明(并定义)两个变量:p
和 n
。 p
有一个初始值设定项,n
没有。所以,你断言 n
是 "not defined" 显然是不正确的。
在一行代码中声明多个变量是完全合法的。但是请注意,在您的示例中,start 和 n 都是 nodeptr 类型。但是你不能有这样的东西: int a, float b, double c; //这是非法的