当推回指向指针向量的指针时,C++获取临时地址

MWr*_*ght 2 c++

我在代码中收到警告:

警告:取临时的地址

我见过类似的问题,但他们没有回答我的具体问题.

这是我的代码正在做的事情:

vector<A*>* ex_A;

ex_A->push_back( &A());  //I get this warning taking address of temporary
Run Code Online (Sandbox Code Playgroud)

这是未定义的行为吗?

我之前确实有这个,这很好,但我不想担心从堆中删除内存.

vector<A*>* ex_A;

ex_A->push_back( new A());
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释这个警告意味着什么吗?

hoc*_*chl 8

&A()正在创建一个临时对象,它会在自动退出完整表达式时被破坏,同时new A()在堆上创建一个新对象,直到你手动使用它来销毁它delete.

我应该补充一点,如果你在你的文件中存储了new分配的对象,vector<A*>并且矢量被破坏,那么存储在里面的对象不会被自动删除,因此你会有内存泄漏.您可以通过valgrind --leak-check=full my_compiled_program在您的程序上使用来验证这一点,这通常是一个好主意.