gpt4 book ai didi

c++ - 没有 "new"C++ 的对象初始化

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:57 25 4
gpt4 key购买 nike

我对 C++ 中的对象初始化有点疑惑。我读到应该尽可能避免使用“new”关键字,因为我不需要它提供的东西(动态分配,对吧?),而且我不想手动删除对象。我在不使用 new 的情况下调用我的对象的初始化时遇到了麻烦。我有这个类:

class Apodization {

public:
Apodization()
{
std::cout << "Constructor for Apodization" << std::endl;
}
}

和这段代码:

Apodization* apoObj();
// Apodization* apoObj = new Apodization();

当使用 new 创建对象时,打印会按预期发生,但并非没有。我猜这是因为我只是在上面的例子中创建了一个 Apodization 类型的指针,但我不知道从那里去哪里。我想知道在不使用 new 关键字的情况下初始化 Apodization 对象的正确方法。谢谢您的帮助!我发现来自 Java 和 Python 的 C++ 类有点奇怪。

最佳答案

使用 RAII(资源分配即初始化)在没有 new 的情况下初始化对象。这意味着当您声明 Apodization 的实例时,该实例的内存将在堆栈上分配,然后调用构造函数来设置初始状态。

这意味着简单地写:

int main(){
Apodization apodization;
//apodization.doSomething();
return 0;
}

这就是让球滚动所需要的一切!(作为一个 Java 人,我喜欢它的简洁性!)

由于对象是在栈上分配的,析构函数会在作用域结束时自动调用;无需手动内存管理。

附言我强烈建议您阅读 Bjarne Stroustrup C++11 Programming Guide !

关于c++ - 没有 "new"C++ 的对象初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33485742/

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