关于学习C++中的int main中new一个新的伐对象的困惑
-
各位大神,你们好,我是刚刚接触代码的新人,这是我关于在C++学习过程中遇到的一点小的疑惑
我利用AI出了一道题目以便于我的学习和知识掌握情况。
尽管我利用百度和AI的解答,我始终不是很明白为什么要会有这一行代码 EBook digital_book = new EBook("A Brief History of Time", 2048);*
题目内容是:你的任务是编写一个完整的C++程序,包含两个类和一个main函数,来模拟图书的入库和销毁过程。
以下是我的代码```
code_text
#include <iostream>
#include <string>// --- 基类 ---
class Book {
public:
std::string title;
Book(std::string n) : title(n) {
std::cout << "Book: " << title << " has been published." << std::endl;
}
~Book() {
std::cout << "Book: " << title << " has been archived." << std::endl;
}
};// --- 派生类 ---
class EBook : public Book {
public:
int* file_size_kb;
// 构造函数修正
EBook(std::string n, int size) : Book(n) {
file_size_kb = new int(size);
std::cout << "EBook: " << title << " has been digitized." << std::endl;
}
~EBook() {
std::cout << "EBook: " << title << "'s digital file has been erased." << std::endl;
delete file_size_kb;
}
};// --- main函数修正 ---
int main() {
std::cout << "--- Library Opening ---" << std::endl;
Book paper_book("The Lord of the Rings");
EBook* digital_book = new EBook("A Brief History of Time", 2048);
std::cout << "--- Library is operating ---" << std::endl;
delete digital_book;
std::cout << "--- Library Closing ---" << std::endl;
return 0;
} -
@g202080272 在 关于学习C++中的int main中new一个新的伐对象的困惑 中说:
Book paper_book("The Lord of the Rings");
EBook* digital_book = new EBook("A Brief History of Time", 2048);
std::cout << "--- Library is operating ---" << std::endl;
delete digital_book;通过new创建的对象为动态内存分配的对象, 程序员将获得对象生命周期控制权, 例如后面可以使用delete去删除结束对象生命 - 即掌握了创建和销毁的控制权
而对比paper_book的生命周期是由 编译器/作用域 来自动控制的
两种对比
- new/delete 动态分配对象: 程序员 将拥有该对象的生命周期控制权力, 且有责任管理好其生命周期
- 优点: 更大的生命周期控制权
- 缺点: 如果没有控制好, 如忘记释放 将会内存泄漏
- 编译器 / 栈对象: 生命周期由编译期自动处理 (作用域)
- 优点: 更低的心智负担, 不用担心释放问题
- 缺点: 程序员无法自由控制生命周期的结束
核心概念: 获得更大权力, 对应需要承担更大的责任
- new/delete 动态分配对象: 程序员 将拥有该对象的生命周期控制权力, 且有责任管理好其生命周期
-
@sunrisepeak 谢谢。我已经理解了
-
,
S sunrisepeak 将这个主题转为问答主题
-
,
S sunrisepeak 将这个主题标记为已解决