gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:36:05 25 4
gpt4 key购买 nike

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

主要.cpp

std::vector <actor> actors;
int main() {
actor (2, 3);
}

Actor .h

class actor
{
public:
int x, y;
actor(int, int);
};

Actor .cpp

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

请问行:

    actor (2, 3)

除了被推送到 actors vector 的 actor 之外,实际上还创建了一个 actor 的实例吗?

注意:如果代码无法编译,请忽略任何错误。实际代码确实可以编译,但过于复杂,无法实际粘贴到此处。

最佳答案

Will the line:

actor (2, 3)

actually create an instance of an actor apart from the one being pushed to the actors vector?

是的。 actor(2, 3) 将创建一个类型为 actor临时对象,除非它是未计算的表达式的一部分1。在此临时的构造函数中,(*this)的拷贝将被压入堆栈(但再次注意,在未计算的表达式中当然不会调用构造函数)。

在包含actor(2, 3) 的表达式末尾,临时对象将被销毁。 vector 拷贝将保持不变。


1 未计算的表达式是 sizeof(…)typeid(…)decltype(…) 中的表达式noexcept(...) 表达式。

关于c++ - 如果我声明一个没有名字的类实例,它会留在内存中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21865856/

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