本文介绍了“如何在C语言中使用工厂函数”的知识。很多人在实际案例的操作中会遇到这样的困难。接下来,让边肖带领大家学习如何应对这些情况!希望大家认真阅读,学点东西!
如果在构造过程中需要“虚拟行为”,使用工厂函数Reason(原因)如果基类对象的状态必须依赖于对象的派生部分,我们需要使用虚拟函数(或等效函数),以便在没有完美构造的对象被错误使用时,最小化时间窗口。
注(注)工厂的返回类型通常应该返回unique _ ptr默认情况下;如果某些用法需要共享,调用者可以将unique_ptr移动到shared_ptr。但是,如果工厂的作者知道返回对象的所有用途都是共享的,他也可以返回shared_ptr,这样make_shared就可以在函数体中使用,节省一次内存分配。
例子,不好的(反面例子)B类{
公众号:
b(){ 0
/* .*/
f();//BAD: C.82:不要在构造函数和析构函数中调用虚函数
/* .*/
}
虚空f()=0;
};B类示例(
受保护:
类令牌{ };
公众号:
显式B(令牌){ /*.*/} //创建一个初始化不完善的对象
虚空f()=0;
模板类T
静态shared_ptrT create() //创建共享对象的接口
{
auto p=make _ sharedT(type name t : token { });
p-post _ initialize();
返回p;
}
受保护:
virtual void post_initialize() //构造后立即调用
{ /* .*/f();/* .*/} //GOOD:虚拟派单安全
};
D类:公共B { //某些派生类
受保护:
类令牌{ };
公众号:
显式D(令牌): B { B:Token { } }
void f()覆盖{ /*.*/};
受保护:
模板类T
friend shared _ ptrT b :3360 create();
};
shared _ ptrD p=d :3360 created();//创建D objectmake_shared调用的构造函数必须是公共的。通过要求一个受保护的令牌,构造函数不能被公开调用,这样我们就可以避免不完全构造对象的流出。由于提供了工厂方法create(),因此可以方便地实现构建过程(在自由存储上)。
注(注)
传统的工厂方法在自由存储上分配对象内存,而不是在堆栈或封闭对象中。
这里介绍一下“如何在C语言中使用工厂函数”的内容。感谢您的阅读。如果你想了解更多的行业,可以关注网站。边肖将为您输出更多高质量的实用文章!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/124822.html