c++ - 关于 C++ 复制 (value1 = value2)

标签 c++

我使用 AS3(面向对象的 Javascript)编写代码,并且正在学习 C++。

在 C++ 中,如果您执行 instance1 = instance2,您似乎在复制 instance1 并将拷贝命名为 instance2。不像 AS3 那样只有“字符串”和数字被复制,而其他类型被“引用”,因此两者都指向同一个对象(如 C++ 指针)。

所以我的问题是:

假设我有“战地风云 4”(或任何需要硬件的游戏)的源代码,并且我正在运行游戏主类的实例,如下所示:BattleField4 gameInstance = new BattleField4() 并且在游戏运行 5 分钟后执行以下代码:BattleField4 gameCopy = gameInstance

这是否意味着内存中加载的游戏进度和图形的“完整拷贝”?

如果游戏将 10Gb 的内存及其图形加载到 RAM 中,那么 gameCopy = gameInstance 之后会加载 20GB 吗?

感谢您的帮助,我希望我的英语很清楚。

最佳答案

在 C++ 中,如果您有一些类型为 Type 的对象 obj,并且您执行:

obj = newObj;

其中 newObj 也是 Type 类型的对象,这将调用 Type 的复制构造函数。这会执行“完全复制”吗?

这取决于 Type 如何实现复制构造函数。看,在 C++ 中,允许类型选择创建拷贝时发生的情况。有时,它只是复制内部数据。有时,您必须在类型内实例化新对象,以便可以正确复制指针内部持有的更大对象。

有时,我们说所讨论的Type 具有“引用语义”。这意味着通过“复制”Type 对象,您得到的是两个独立的 Type 对象,它们在内部引用相同的数据。也就是说,它们都引用相同的东西。这是完全有效的,并在许多实用 C++ 类中使用。

有时,我们完全禁止复制。这通常是为不适合引用语义的对象完成的,并且复制它们太麻烦了。如果一款游戏要有一个巨大的整体对象来代表游戏,那么它要么是不可复制的,要么它的复制构造函数将完全损坏且无法正常工作(众所周知,游戏开发者对这些事情很懒惰)。

关于c++ - 关于 C++ 复制 (value1 = value2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18426056/

相关文章:

c++ - 如何从交付给客户的 C++ 应用程序中获取调试信息?

c++ - 如何在 C++ 中为 LTEXT 控件调用 WM_CTLCOLORSTATIC 消息

c++ - 要加倍或 float 的字符串会截去小数点

c++ - 为什么我不能打印出我的宏创建结构的所有成员名称?

c++ - 在 OSX 上从 C++ 打开 PDF

c++ - 错误: ‘sf::NonCopyable& sf::NonCopyable::operator=(const sf::NonCopyable&)’ is private within this context

c++ - 如何在 Visual Studio 2017 中使用 GLOP 线性求解器 [C++]

c++ - 编译后在最后暂停 c++ 程序

c# - 从非托管库的方法名称中获取参数类型?

c++ - CMake 找不到 libcurl-config.cmake