[英]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.