gpt4 book ai didi

c++ - 存储指向在方法中创建的对象的指针

转载 作者:行者123 更新时间:2023-11-30 01:32:29 25 4
gpt4 key购买 nike

使用 C++:

我目前有一个方法,如果事件发生,就会创建一个对象,并且指向该对象的指针存储在指向该类对象的指针 vector 中。但是,由于一旦局部作用域结束,对象就会被销毁,这是否意味着我存储到 vector 中对象的指针现在为 null 或未定义?如果是这样,是否有任何通用的方法来解决这个问题 - 我假设最好的方法是在堆上分配。

我之所以这样问,是因为当我尝试访问 vector 并对内容进行操作时,我遇到了奇怪的行为,我不确定这可能是原因还是完全不相关。

最佳答案

这取决于你如何分配对象。如果您将对象分配为自动变量(即在堆栈上),那么一旦对象超出范围,指向该对象的任何指针都将变得无效,因此取消引用指针将导致未定义的行为。

例如:

Object* pointer;

{
Object myobject;
pointer = &myobject;
}

pointer->doSomething(); // <--- INVALID! myobject is now out of scope

但是,如果您使用 new 运算符在堆上分配对象,那么即使您退出本地作用域,该对象仍将保持有效。但是,请记住 C++ 中没有自动垃圾收集,因此您必须记住 delete 对象,否则会发生内存泄漏。

关于c++ - 存储指向在方法中创建的对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1616525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com