【发布时间】:2011-12-16 04:00:45
【问题描述】:
假设你编写了一个类 A,构造函数是私有的(以防止其他人在堆栈上创建它),然后有一天另一个开发人员添加了一个新的 ctor,比如 A(int),并想在 main() 中使用:
一一(1)
在堆栈上创建它。你如何防止这种情况发生?
我的解决方案:
声明一个公共构造函数
A(void& input )
{
Cerr << “please do not create it on stack” << endl ;
exit(1);
}
我不确定它是否正确?
谢谢
【问题讨论】:
-
请问为什么你想防止这种情况发生?给我们一个令人信服的理由,我们可能会在此基础上为您提供更好的实施。
-
@BenjaminLindley C++ 如此复杂的原因之一是为人们提供尽可能多的工具来在编译时执行代码库的规则。它们都不会是完美的……您可以争辩说不应该打扰
const,因为可以编辑您的代码的人可以将const_cast删除,但是 const-correctness 无论如何都会捕获很多错误。想要使用书中的每一个技巧来帮助执行代码库的实践和协议并减少错误并没有什么“愚蠢”的。对于这种情况,甚至可以这样做……看我的回答。 -
@HostileFork:除了在C++中,只要你可以构造一个对象,你就可以随时构造它。
A a;和std::unique_ptr<A> a;之间的最大区别是什么?我完全支持编译器强制执行,您提出的解决方案很有趣,而且不太打扰,但在这种情况下,它真的不起作用。 -
@MatthieuM。好吧,我们再次使用油漆:-/ 是的,如果您只是从工厂方法返回一个指针,则没有太大区别,但是如果您返回一个 shared_ptr(例如),那么这种事情可能会影响不同。
标签: c++ class object constructor private