C++中怎么使用工厂函数
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,本篇内容介绍了"C++中怎么使用工厂函数"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!如果在构造过程
千家信息网最后更新 2025年12月01日C++中怎么使用工厂函数如果在构造过程中需要"虚行为",使用工厂函数 Reason(原因) Note(注意) Example, bad(反面示例) Example(示例)
本篇内容介绍了"C++中怎么使用工厂函数"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
如果基类对象的状态必须依赖对象的派生部分,我们需要使用虚函数(或等价物)以便尽量压缩没有完美构造完成的对象被错误使用的时间窗口。
工厂的返回类型通常应该默认返回unique_ptr;如果有些用法需要共享,调用者可以将unique_ptr移动到shared_ptr。然而,如果工厂的作者知道返回对象的所有的用法都是共享方式,也可以返回shared_ptr,这样在函数体内部可以使用make_shared节约一次内存分配。
class B {
public:
B() {
/* ... */
f(); // BAD: C.82: Don't call virtual functions in constructors and destructors
/* ... */
}
virtual void f() = 0;
};class B {
protected:
class Token {};
public:
explicit B(Token) { /* ... */ } // create an imperfectly initialized object
virtual void f() = 0;
template
static shared_ptr create() // interface for creating shared objects
{
auto p = make_shared(typename T::Token{});
p->post_initialize();
return p;
}
protected:
virtual void post_initialize() // called right after construction
{ /* ... */ f(); /* ... */ } // GOOD: virtual dispatch is safe
};
class D : public B { // some derived class
protected:
class Token {};
public:
explicit D(Token) : B{ B::Token{} } {}
void f() override { /* ... */ };
protected:
template
friend shared_ptr B::create();
};
shared_ptr p = D::create(); // creating a D object make_shared调用的构造函数必须是公开的。通过要求一个保护的令牌保证构造函数不能被公开调用,这样我们就避免了不完全构造的对象流出。由于提供了一个工厂方法create(),(自由存储上的)构造过程可以便利地实施。
Note(注意)
常规的工厂方法在自由存储上分配对象内存,而不是在堆栈或者封闭的对象内。
"C++中怎么使用工厂函数"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
函数
工厂
对象
过程
C++
自由
内存
内容
方法
更多
知识
示例
分配
存储
实用
学有所成
接下来
令牌
作者
原因
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
云服务器要备案吗
电脑弹出服务器运行
靠谱的erp财务软件开发机构
高级数据库工程师简历
黑龙江数据库安全防护系统
ff14国际服哪个服务器好
大学网络安全志愿队方案
stampro网络安全
服务器安全和共享时间
华为软件开发新人培训计划
数据库系统与应用上机答案
java为什么数据库更新失败
四川项目软件开发靠谱吗
工商管理学数据库吗
搭建网络安全实验环境
银行java与c软件开发
rds数据库安全设计方案
连接远程数据库 慢
赫斌 数据库
大连网络技术开发质量
阿里云服务器一年价格20T价格
ACCESS数据库学习励志
c语言代码实现导入数据库
计算器环境安全服务器未启动
迪卡侬数据库下载
联通网络服务器坏了怎么办
俄罗斯钓鱼4是不是服务器关了
宝坻区项目网络技术售后服务
服务软件开发
无锡工程软件开发价格多少