根据Asynchronous programming in C++ (Windows Store apps):
// Explicit construction. (Not recommended)
// Pass the IAsyncOperation to a task constructor.
// task<DeviceInformationCollection^> deviceEnumTask(deviceOp);
// Recommended:
auto deviceEnumTask = create_task(deviceOp);
为什么作业(create_task
)优于施工?
答案 0 :(得分:2)
我认为你无论如何都受到束缚。您将被绑定到您正在构建的类以及您可能正在使用的工厂接口,并且要保持与对您的实现中使用的公共接口所做的任何更改的兼容性。在任何一个地方都可以进行破坏性的更改。微软对这个问题的回答来自create_task()文档:create_task()只是一个便利功能,因为它允许在创建任务时使用'auto'关键字。 http://msdn.microsoft.com/en-us/library/vstudio/hh913025.aspx
答案 1 :(得分:1)
我认为一般使用工厂的原因是更理想,而不是调用构造函数,因为这与接口的特定实现不太相关。如果你调用构造函数,那么你的程序与给定的实现紧密结合。
与工厂的对象构造耦合较少,也更灵活和可扩展。例如,在API的下一个版本中,提供者可能决定弃用某些实现或用其他内容替换它。如果你只使用工厂,那么他们可以简单地改变它的实现来返回另一个类的实例,或者在内部注入更多的依赖项。但是如果你的程序与特定的类绑定,那么实现起来会非常困难。