包含枚举的结构的C ++ Copy构造函数

时间:2016-11-22 22:38:54

标签: c++ enums structure copy-constructor

首先,对于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;
}

我不确定是否必须为此创建一个复制构造函数。如果必须的话,我不确定我应该在哪里创建它以及如何创建它。

1 个答案:

答案 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参数是另一个问题。)