我可以阻止未来的开发人员构建对象吗?

时间:2010-05-11 01:19:03

标签: c++

你有一个A类,你把ctor设置为私有,所以客户不能打电话 “一个;” 在堆栈上创建obj。 但是有一天,另一位开发者会添加一个新的ctor: “A(INT)” 并试着称之为“A a(1);”在main()中。所以这将在堆栈上创建一个obj。你怎么防止这种情况?

4 个答案:

答案 0 :(得分:11)

如果你暗示,你的课程被编辑了,那么你无法做任何不能被“编辑掉”的事情 - 你只有一个私人ctor是非常好的保护,但它被编辑了其他开发者。只是非常清楚地记录,必须永远不要编辑该课程以便有公共ctors,并且,如评论所述,不要雇用那些践踏这些要求的人! - )

答案 1 :(得分:4)

您无法对C ++源代码执行任何操作可能会限制具有修改C ++源代码权限的其他人的未来行为。其他开发人员可以删除字符串'private:',就像他们可以添加具有另一个签名的公共构造函数一样容易。你所能做的只是仔细评论为什么不应该直接分配这个课程的原因,并期望其他开发人员阅读并注意。

答案 2 :(得分:0)

好吧,我可以想到几个方法:

  1. 如果您使用某些版本控制软件(您应该!),您可以设置提交挂钩,以防止提交该文件的任何更改(或创建正则表达式以防止添加新的构造函数)。

  2. 您还可以将整个类包装到DLL中,并要求该项目链接到它并使用从DLL导出的公共接口。如果他们没有看到,他们就无法改变来源。

  3. 雇一个站在开发人员旁边的棒球棒。他应该穿着T恤,上面写着“不能改变X级构造函数”。

答案 3 :(得分:0)

失败的说法是“未来的任何人都不可能以某种我未曾想到的方式使用它。”

防御性地编码你的物体,如果它不能正常运行,它会使它失败。不要随意说“不要在堆栈上创建”,然后将ctor设为私有;也许我有充分的理由想要在另一个对象中聚合该对象。

程序员应该专注于确保他们编写的代码按照他们希望的方式工作,并且他们还应该进行设置,以便在出现问题时显而易见。程序员将任意预期或期望或预期的使用模式编码到他们的软件中。将构造函数设为私有只会尖叫用户,他们可能不够聪明,无法自己构建这个东西。这样做会让很多人使用你的工厂界面或你提供的任何东西,但你不知道所有可能的未来需求,所以请保持足够好。

如果您担心其他人进行更改,然后您正在进行调试,请编写一些单元测试。如果您收到测试未涵盖的错误报告,则要么编写测试并修复错误,要么找出谁进行了更改并将其反弹给该人。