gpt4 book ai didi

c++ - 初学者和cpp类

转载 作者:太空狗 更新时间:2023-10-29 20:29:10 27 4
gpt4 key购买 nike

我正在使用“构造函数和析构函数”下的代码 here

基本上,我想将它与下面的指针构造结合起来“指向类的指针”(下面一点),我觉得它非常简洁。

现在可以了:

int main () {
CRectangle * prect; //l2
CRectangle rect (3,4); //l3
prect = ▭ //l4
cout << "rect area: " << (*prect).area() << endl;
return 0;
}

我的问题是,我们能否用更优雅的方法替换 l2-l4不需要在第 3 行创建矩形?

最佳答案

要创建不需要任何自动变量(例如上面代码中的 rect)的对象,您必须使用 new 运算符。使用 new 运算符创建的对象存储在 free store 中,new 表达式计算为指向新创建对象的指针。

现在,可以继续说,new 运算符就是答案,仅此而已,但实际上不是:它没有回答用更优雅的解决方案替换这两行的问题,因为它不会是一个。

这个答案的其余部分与如何使用 new 无关。

与自动对象不同,存储在自由存储中的对象不会自动销毁,而是它们的生命周期和销毁由 delete 运算符控制(您应该删除不再需要释放的对象资源)。为确保销毁,您应该始终将来自 new 表达式的指针存储到所谓的智能指针 中。一条很好的、简单的规则:仅在智能指针构造函数中使用 new 运算符(除非您知道自己在做什么)。

C++11 中有多个智能指针,而标准的早期版本只定义了一个,auto_ptr。也许是因为它的怪癖,或者仅仅是因为它有一个替代品,它实际上在 C++11 中已被弃用,并且可能不应该在新代码中使用,至少在 C++11 中不应该使用(现在,这是一个意见) .

智能指针使用示例:

boost::shared_ptr<CRectangle> shared_rect(new CRectange(3, 4));
std::unique_ptr<CRectangle> rect(new CRectangle(3, 4)); // C++11 only

// use smart pointers like like regular pointers; indirection through * or ->
// i.e. (*rect).area() or rect->area()

关于c++ - 初学者和cpp类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10887810/

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