c++ - 声明后调用构造函数

标签 c++

这可能是一个非常基本的问题。如何在变量声明后调用构造函数?例如,这是一个工作代码:

// in header
class Bar
{
    SomeClass *foo;
public:
    Bar();
}

// in .cpp
Bar::Bar()
{
    foo = new SomeClass(1, 2, 3);
}

但我怎样才能改变它,使 foo 不是指针?

谢谢!

最佳答案

如果您的 foo 是在类内部定义的,那么使用构造函数初始化列表如下:

class X {
   X() : foo(1,2,3) {}
   SomeClass foo;
};

如果您需要计算foo-s 构造函数的参数,那么它会变得更加困难。您可以添加可以计算您的值的函数,即:

class X {
   X() : foo(initX(),initY(),initZ()) {}
   SomeClass foo;

   static int initX() { return 1;}
   static int initY() { return 2;}
   static int initZ() { return 3;}
};

但这并不总是可能的——也就是说,这取决于你如何计算你的值(value)。 (静态是有意为之,因为您最好不要使用未完全构造的类成员)。

您也可以将这些值作为构造函数参数传递。

关于c++ - 声明后调用构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38425573/

相关文章:

c++ - 存储类初始化的模板

c++ - 插入到队列前面而不是后面

c++ - 如何通过子成员函数创建线程

c++ - 什么时候通过引用在另一个 lambda 中捕获一个 lambda 是安全的?

c++ - 将新分配的内存分配给结构指针时出现段错误

c++ - 如何使用外部库中的函数?

c++ - # 包含在 xcode 中找不到的 <cstddef> 文件

c++ - 当它只有 4 个字节时,float 怎么可能容纳 3.4E38 这样大的数字呢?

C++解析xml的子节点

C++ 访问私有(private) vector 值