我主要是 ac# 程序员,但我正在从事的一个项目让我使用 c++。在 C# 中,我能够定义一个类的成员,该成员在初始化之前为空。像这样:
Class Foo{
private Bar _bar;
public Foo(int valueBarNeeds){
_bar = new Bar(valueBarNeeds);
}
}
的价值_bar
null 并且在初始化之前禁止访问。这个用例的基本原理是私有对象的构造函数依赖于一些在构造父类之前不知道的值。
现在,在 C++ 中,我尝试做同样的事情:
class Foo{
public:
Foo(int valueBarNeeds){
_bar = new Bar(valueBarNeeds);
}
private;
Bar _bar;
};
编译器抛出一个错误,指出没有接受零参数的 bar 构造函数。我的理解是,在 C++ 中,new
关键字意味着完全不同的东西。new
作为这种差异的一部分,可以通过不带关键字的声明来定义在方法末尾处理的对象,而无需手动删除。
SomeFunc(){
int valueBarNeeds = 100;
Bar _bar(valueBarNeeds);
_bar.SomeFunc();
}
_bar
当方法堆栈超出范围时被删除。
这就提出了我的问题。如果我在 C# 中用于创建单元化对象的语法实际上试图在 C++ 中初始化对象...如何创建可由父对象构造函数构建的其余类方法可访问的单元化类型?