我很难适应C++处理动态和自动内存的方式。我的问题:
在this帖子中,我读到所有指向dealloc内存的指针均无效。但是这个家伙是在谈论手动取消分配还是自动取消分配后的行为?
这是一个例子:
int main(){
UiTreeRecord child = UiTreeRecord::UiTreeRecord();
createSomeScope(child);
//Does child still have a valid parent?
//Or does parent point to a piece of memory that has been deallocated?
}
void createSomeScope(const UiTreeRecord& child){
UiTreeRecord root = UiTreeRecord::UiTreeRecord();
child.attachParent(root);
}
void UiTreeRecord::attachParent(UiTreeRecord& newParent) {
if(parent != nullptr) {
detachParent();
}
parent = &newParent;
}
最佳答案
当变量超出范围时。或在自动成员变量的情况下,拥有对象被破坏时。
不,不能。指针只是一直指向现在无效的内存。无论对象被销毁的方式如何,指向被销毁对象的指针和引用总是无效的-无论是自动,动态还是静态释放。
在您的示例中,root
被释放在createSomeScope
的末尾,并且您在UiTreeRecord::attachParent
中分配的指针变为无效。