C++中怎么使用工厂函数
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本篇内容介绍了"C++中怎么使用工厂函数"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!如果在构造过程
千家信息网最后更新 2025年02月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安全错误
数据库的锁怎样保障安全
广西网络安全保障十大品牌
曲靖计算机网络技术服务学校
经贸网络安全是啥
高中数据库管理技术pdf
智慧环保软件开发
互联网与科技创新发展的影响
人地系统主题数据库
紫光数据库如何设置数据源
网络安全管理合理化建议
网络技术 信息系统
天津服务器配套机柜云主机
浙江网络技术应用
2020年网络安全观看
python数学软件开发
h5本地存储数据库
系统数据库设计的工作
香港外贸公司服务器
网络安全病毒应急演练记录
公网服务器安全防护
数据库中的compute
从数据库读出某一项的值
sql数据库编程技术ppt
网络技术 信息系统
数据库系统安全性的论文
上海品牌软件开发定制哪个好
1366 服务器cpu
信息网络安全概念龙头股
网络安全的主要危险有
数据库英文词汇
成都软件开发解决方案报价