重载operator<<运算符时第二个参数最好不能写成指向对象的指针
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重载operator<<运算符时第二个参数最好不能写成指向对象的指针相关的知识,希望对你有一定的参考价值。
如题,否则会在调用"std::cout<<this"时”偷偷“调用这个友元函数。本来是想看这个对象的指针值,却看到”不想看到的事情”。
#include <iostream> using std::cout; using std::endl; using std::ostream; class Tree { int height; public: Tree(int treeHeight) : height(treeHeight) { cout << __func__ << "(), this = " << this << endl; } ~Tree() { cout << "~Tree()\n"; } #if 1 friend ostream& operator<<(ostream& os, const Tree* t) { return os << "Tree height is: " << t->height << endl; } #else friend ostream& operator<<(ostream& os, const Tree& t) { return os << "Tree height is: " << t.height << endl; } #endif }; int main() { Tree* t = new Tree(40); delete t; t = nullptr; delete t; }
[email protected]:~/project/test/cpp/new_del$ g++ test2.cpp
test2.cpp: In function ‘int main()’:
test2.cpp:31:7: error: ‘nullptr’ was not declared in this scope
t = nullptr;
^
[email protected]:~/project/test/cpp/new_del$ g++ test2.cpp -std=c++11
[email protected]:~/project/test/cpp/new_del$ ./a.out
Tree(), this = Tree height is: 40
~Tree()
本文出自 “用C++写诗” 博客,谢绝转载!
以上是关于重载operator<<运算符时第二个参数最好不能写成指向对象的指针的主要内容,如果未能解决你的问题,请参考以下文章
C ++ STL列表运算符重载对(根据第一个值排序,使用第二个值访问)