在编译的时候遇到了 未定义引用
root@czp-PC:/mnt/hgfs/vmsd/cpp/class_static# g++ used.cpp
/tmp/ccFDQ1NR.o:在函数‘main’中:
used.cpp:(.text+0xbc):对‘page::~page()’未定义的引用
collect2: error: ld returned 1 exit status
root@czp-PC:/mnt/hgfs/vmsd/cpp/class_static#
原因是,这个析构函数~page()只在类的声明中写上了,
但是没写它的函数实体,所以在编译的时候报了这个错误
如果main函数里面没有调用跟这个类相关的东西,比如说通过这个类去实例化一个对象等等。。
然后做了一个测试,在main函数里面这样写
int main(void)
{
page p1;
page p2;
page p3;
page p4;
p1.print();
return 0;
}
此时编译后的结果为
root@czp-PC:/mnt/hgfs/vmsd/cpp/class_static# g++ used.cpp
/tmp/ccZV6y1O.o:在函数‘main’中:
used.cpp:(.text+0xe5):对‘page::~page()’未定义的引用
used.cpp:(.text+0xf1):对‘page::~page()’未定义的引用
used.cpp:(.text+0xfd):对‘page::~page()’未定义的引用
used.cpp:(.text+0x109):对‘page::~page()’未定义的引用
used.cpp:(.text+0x12b):对‘page::~page()’未定义的引用
/tmp/ccZV6y1O.o:used.cpp:(.text+0x137): 跟着更多未定义的参考到 page::~page()
collect2: error: ld returned 1 exit status
root@czp-PC:/mnt/hgfs/vmsd/cpp/class_static#
可以发现,实例化一个对象的时候,它会检测这个object对应的class里面有没有构造函数和析构函数,并且有没有写他们的函数实体,如果没写的话就报错了,
我这里是实例化了4个对象,并且调用了其中一个对象里面的一个函数
我在想我才实例化了4个对象为什么报错5次
从此可以得出结论,就是当执行对象的函数的时候,执行完了,它也会执行一次析构函数进行收尾的,所以才会得出有5个报错。