我正在将一个项目迁移到 c++,因为我在用 c# 开发它时遇到了性能上限。然而,这是我第一次使用 c++,我发现自己做了很多看起来不太正确的事情......
考虑以下抽象示例:
class ClassC
{
ClassC::ClassC(int option)
{
//do something
}
}
class ClassB
{
ClassC* objC
ClassB::ClassB(ClassC* objC)
{
this->objC = new ClassC(*objC);
}
}
class ClassA
{
void functionA(void)
{
ClassB objB (&ClassC(2));
}
}
ClassA 有一个创建 ClassB 的函数。ClassB 的构造函数接受一个 ClassC,objC。objC 是通过引用传递的,因为 ClassC 不是原始类型,而是通过引用存储的,因为 ClassC 没有默认构造函数。但是,由于objC是在静态内存中创建的,并且会在functionA完成时被销毁,所以ClassB需要将objC指向的值复制到动态内存中,然后存储一个指向该副本的指针。
这对我来说似乎很绕,让我觉得我在错误地接近某些东西。这是在 C++ 中做的标准事情吗?
编辑:每个人似乎都在说该行ClassB objB (&ClassC(2));
不正确,因为 ClassC 对象的值将在 ClassB 复制它之前丢失。但是我已经编译了我的示例,但事实并非如此。这是修改后的工作代码:
class ClassC
{
int option;
public:
ClassC::ClassC(int option)
{
this->option = option;
}
int ClassC::getOption(void)
{
return option;
}
};
class ClassB
{
ClassC* objC;
public:
ClassB::ClassB(ClassC* objC)
{
this->objC = new ClassC(*objC);
}
int ClassB::getOption(void)
{
return objC->getOption();
}
};
class ClassA
{
public:
static ClassB functionA(void)
{
return ClassB (&ClassC(2));
}
};
int main(void)
{
ClassB objB = ClassA::functionA();
int test = objB.getOption(); //test = 2, therefore objC was copied successfully.
return 0;
}