繁体   English   中英

没有“新”C ++的对象初始化

[英]Object initialization without “new” C++

我想知道C ++中的对象初始化。 如果可能,我应该避免使用'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人,我喜欢这个简洁!)

当对象在堆栈上分配时,析构函数将在作用域的末尾自动调用; 无需手动内存管理。

PS我强烈建议你阅读Bjarne Stroustrup C ++ 11编程指南

你不能。 new运算符为对象分配内存,调用该对象的构造函数,然后返回指针。 在你的代码中,你所做的就是声明指针而没有为它预留任何内存,或者构造函数做任何工作。 它只是一个指向什么的指针。

只需创建一个静态实例:

static Apodization apoObj;  // This will create an instance of the object.

如果您希望使用指针来访问它,那么指向静态实例:

static Apodization SapoObj;  // This will create an instance of the object.
static Apodization* apoObj = &SapoObj;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM