如果我声明一个没有名字的类实例,它会留在内存中吗?

Rob*_*y18 2 c++ class vector member instance

我有以下代码(我将跳过包含和你有什么):

main.cpp中

std::vector <actor> actors;
int main() {
    actor (2, 3);
}
Run Code Online (Sandbox Code Playgroud)

actor.h

class actor
{
public:
    int x, y;
    actor(int, int);
};
Run Code Online (Sandbox Code Playgroud)

actor.cpp

extern std::vector <actor> actors;
actor::actor(int x, int y)
{
    actor::x = x;
    actor::y = y;
    actors.push_back(*this);
}
Run Code Online (Sandbox Code Playgroud)

请问行:

    actor (2, 3)
Run Code Online (Sandbox Code Playgroud)

实际上创建一个演员的实例,除了被推到演员矢量的那个?

注意:如果代码没有编译,请忽略任何错误.实际的代码会编译,但实际上粘贴在这里太复杂了.

Kon*_*lph 5

请问行:

actor (2, 3)
Run Code Online (Sandbox Code Playgroud)

实际上创建一个演员的实例,除了被推到演员矢量的那个?

是.actor(2, 3)将创建一个类型的临时对象actor,除非它是未评估的表达式的一部分1.在这个临时的构造函数中,一个副本(of *this)将被压入堆栈(但请注意,在未评估的表达式中,构造函数当然不会被调用).

在包含的表达式的末尾actor(2, 3),临时将被销毁.矢量副本将保持不变.


1个一种不计算表达式是一个内部的表达sizeof(…),typeid(…),decltype(…)noexcept(…)表达.