繁体   English   中英

为什么在这种情况下没有隐式生成operator =和copy-constructor?

[英]Why is operator= and copy-constructor NOT implicitly generated in this case?

我有一个这样的结构:

/* Renderable definition */
    struct Renderable
    {
        Renderable(VertexBufferPtr vertexBuffer, const Mat4& wvpMatrix, const Mat4& worldMatrix, const Vec4& diffuseColor, const float specularFactor) : 
                    mVertexBuffer(vertexBuffer), mTransform(wvpMatrix, worldMatrix), mMaterial(diffuseColor, specularFactor)
        {
        }

        /* Transform definition */
        struct Transform
        {
            Transform(const Mat4& wvpMatrix, const Mat4& worldMatrix) : mWVPMatrix(wvpMatrix), mWorldMatrix(worldMatrix)
            {
            }

            const Mat4 mWVPMatrix;
            const Mat4 mWorldMatrix; 
        };

        /* Material definition */
        struct Material
        {
            Material(const Vec4& diffuseColor, const float specularFactor) : mDiffuseColor(diffuseColor), mSpecularFactor(specularFactor)
            {
            }

            const Vec4 mDiffuseColor;
            const float mSpecularFactor;
        };


        const VertexBufferPtr mVertexBuffer;
        const Transform mTransform;
        const Material mMaterial;
    };

    /* RenderQueue definition */
    typedef std::vector<Renderable> RenderQueue;

当我尝试像这样在我的代码中使用它时;

RenderQueue CreateRenderQueue(const Scene* scene);

....

RenderQueue renderQueue(CreateRenderQueue(activeScene));  

我收到以下编译错误:

c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(2514): error C2582: 'operator =' function is unavailable in 'Renderable'

经过一番挖掘之后,我才意识到这是因为我没有定义赋值运算符和复制构造函数。 然后我这样做了,瞧! 它编译了...

....但是我的问题是,为什么编译器未隐式生成赋值运算符和复制构造函数? (vs2010)我没有定义它们,因此确定会生成它们吗?

谢谢

您有恒定的类成员对象,因此无法分配这些对象。 但是,应生成一个副本构造函数。

请参阅此问题的答案 ,其中指出了隐式默认构造函数(强调我的)的条件:

如果您未定义构造函数 ,则编译器将为您定义默认的构造函数

您定义了一个构造函数,因此隐式默认构造函数不再可用,由您决定。

实际上,相同答案下面的几行给出了所有基本类方法的相同规则:

如果未定义析构函数/复制构造函数/赋值运算符,则编译器将为您构建其中之一

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM