首先,对于noob问题感到抱歉,因为我刚开始用C ++编程。
我在头文件中定义了一个结构:
typedef struct DataStruct
{
double foo;
double foo1;
DataStruct::DataStruct()
: foo(0.0), foo1(0.0)
{
}
} DataStruct;
然后我在另一个文件中有一个函数,它在用值填充它之后返回该结构的对象:
DataStruct SomeFile::SomeFunction(Foo foo)
{
DataStruct dataStruct;
double foo2 = 5.8;
DataStruct.foo = foo2;
double foo3 = 6.0;
DataStruct.foo1 = foo3;
return DataStruct;
}
我不确定是否必须为此创建一个复制构造函数。如果必须的话,我不确定我应该在哪里创建它以及如何创建它。
答案 0 :(得分:3)
您不需要为您显示的示例定义自定义复制构造函数。编译器将为您提供默认的复制构造函数,它执行struct的值的成员副本。当struct只包含定义自己的副本构造函数的简单数据类型和/或类型时,默认的cop构造函数就足够了。
只有当您真正需要关注复制构造函数时才需要管理外部资源(例如文件句柄,动态分配的内存等)(参见Rule of Three)。
话虽这么说,如果你想定义一个自定义拷贝构造函数,它看起来像这样:
struct DataStruct
{
double foo;
double foo1;
DataStruct()
: foo(0.0), foo1(0.0)
{
}
DataStruct(const DataStruct &src)
: foo(src.foo), foo1(src.foo1)
{
}
DataStruct& operator=(const DataStruct &rhs)
{
if (&rhs != this)
{
foo = src.foo;
foo1 = src.foo1;
}
return *this;
}
};
话虽如此,根据您展示的示例,编译器可能会使用Return Value Optimization,因此SomeFunction()
不必首先复制返回的dataStruct
变量(其Foo
参数是另一个问题。)