有没有办法在.cpp中初始化/调用CTOR?

时间:2016-07-11 14:21:27

标签: c++ variables pointers object constructor

我在.h

中使用了这些指针声明对象
ILFO *pLFOPianoRoll1, *pLFOPianoRoll2, *pLFOPianoRoll3;

我在.cpp中使用:

初始化
pLFOPianoRoll1 = new ILFO(this, 8, 423, kParamIDPianoRollLFO1, 0);
pLFOPianoRoll2 = new ILFO(this, 8, 542, kParamIDPianoRollLFO1, 1);
pLFOPianoRoll3 = new ILFO(this, 8, 661, kParamIDPianoRollLFO1, 2);

但是我想避免在这里指点(我了解到#34;如果你不需要它们,不要使用它们"),只需使用变量/类(由于以后手动管理内存)。

但是如何在.h(例如ILFO mLFOPianoRoll1)中取消对象的变量,而不是在.cpp上调用CTOR?

2 个答案:

答案 0 :(得分:1)

为了简单地声明变量,请使用extern关键字:

extern ILFO obj; //just declaration, no constructor is called.

在.cpp文件中

ILFO obj(blah, blah, blah); //definition

当然,如果您正在讨论命名空间范围(包括全局)变量。如果您正在讨论类成员,那么您必须知道在类的构造函数之前不会调用成员的构造函数。您可以将参数传递给constructor initialization list中的构造函数。

答案 1 :(得分:1)

您可以使用初始化列表来实现此目的。

#include <iostream>
#include <string>
using namespace std;

class A
{
public:
    A(int a_) : a(a_) { }

    void print() 
    {
        std::cout << "A: " << a << std::endl;
    }

    int a;
};

class B
{
public:
    B() : a(1), a2(3) {}
    A a;
    A a2;
};

int main() {
    B bObj;
    bObj.a.print();
    bObj.a2.print();
   return 0;
}

https://ideone.com/C7Vx1X