对象初始化没有" new" C ++

时间:2015-11-02 19:54:50

标签: c++ oop syntax standards

我想知道C ++中的对象初始化。我读过使用' new'如果可能,应该避免使用关键字,因为我不需要它提供的内容(动态分配,对吗?),我不想手动删除对象。我在调用我的对象的初始化时没有使用新的麻烦。我有这门课:

while (fscanf(fp, "%s %d\n", file, &dup) == 2)

和这段代码:

class Apodization {

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

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

3 个答案:

答案 0 :(得分:13)

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

这意味着只需写下:

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

只需要让球滚动! (我自己就是一个Java人,我喜欢这个简洁!)

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

P.S。我强烈建议您阅读Bjarne Stroustrup C++11 Programming Guide

答案 1 :(得分:1)

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

答案 2 :(得分:-1)

只需创建一个静态实例:

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;