我刚开始学习C++,正在尝试使用二叉树。我找不到答案,如果我应该修复这个警告“局部变量的地址可能会转义函数”?我有类BinaryTree
。这个类有两个指针BinaryTree * left = nullptr;
和BinaryTree * right = nullptr;
。我的类也有方法void BinaryTree::randomTree(bool grow, bool actDepth, short maxDepth, short depth = 0)
。
从一开始我就做空树
BinaryTree tmpTree = BinaryTree(
minDepth,
mProbability,
cProbability
);
然后我想种这棵树
tmpTree.randomTree(
(bool) Helper::fiftyFifty(),
(bool) Helper::fiftyFifty(),
Helper::getRandomNumber(minDepth, maxDepth + 1)
);
在randomTree
方法中有一个警告
... some code ...
BinaryTree lTmpTree = BinaryTree(
this->minDepth,
this->mProbability,
this->cProbability
);
this->left = &lTmpTree; // <---- I have warning there
this->left->randomTree(grow, actDepth, maxDepth, depth + (short) add);
... some code ...
请告诉我,我是否应该担心这个警告?
1条答案
按热度按时间ldioqlga1#
这是一个作用域问题,你创建了一个局部变量,
lTmpTree
,当你退出局部作用域时,它会被销毁。但是,您将获取对该局部变量的引用
这是很危险的,因为正如前面提到的,
lTmpTree
在你离开本地作用域时会被破坏,这意味着lTmpTree
的位可能仍然正确地存在于内存中,如果它们没有被重新分配给其他的东西,但是你不能指望它,这就是为什么你会得到警告。