引言:一个价值百万的Bug
2007年,某著名游戏公司因内存泄漏导致服务器崩溃,损失数百万美元。最终定位到一段浅拷贝代码:
class Player {
public:
Player(const char* name) {
name_ = new char[strlen(name)+1];
strcpy(name_, name);
}
~Player() { delete[] name_; }
private:
char* name_;
};
void createTeam() {
Player p1("Alice");
Player p2 = p1; // 浅拷贝!
} // p2析构后,p1.name_ 成为悬垂指针!
这个Bug揭示了深拷贝与浅拷贝的根本区别。本文将深入剖析这一面试必考知识点。