目次
~~~~我的生活,我的点点滴滴!!       
这篇文章将围绕两个疑问点展开
一、什么是二段构建模式?
二、为什么要这么用?
ホームページ データベース mysql チュートリアル 浅谈cocos2dx(19) 二段构建模式

浅谈cocos2dx(19) 二段构建模式

Jun 07, 2016 pm 03:33 PM
第二部 構築する モデル 人生

~~~~我的生活,我的点点滴滴!! 这篇文章将围绕两个疑问点展开 一、什么是二段构建模式? 大家都知道在C中我们一般在构造函数中为对象分配内存空间然后初始化成员变量,比如我们调用了new某个东西,那么在堆上会先为对象分配内存空间,然后调用构造函数

~~~~我的生活,我的点点滴滴!!       


这篇文章将围绕两个疑问点展开


一、什么是二段构建模式?

        大家都知道在C++中我们一般在构造函数中为对象分配内存空间然后初始化成员变量,比如我们调用了new某个东西,那么在堆上会先为对象分配内存空间,然后调用构造函数,在构造函数中完成一些初始化的工作。而二段构建模式就是将内存空间的分配和初始化分开来完成,然后调用一个静态方法来返回这个对象。

        就拿cocos2dx中的Sprite类来说吧,当我们调用Sprite::create()的时候内部先使用new来分配内存空间,然后调用init方法来初始化一些变量的设置。所以cocos2dx中的二段构建模式就是将new分配内存空间和init初始化内容分开来处理,而不是c++传统的做法在构造函数中初始化变量。

Sprite* Sprite::create()
{
	//分配内存
	Sprite *sprite = new Sprite();
	//init初始化
	if (sprite && sprite->init())
	{
		//内存管理的工作
		sprite->autorelease();
		return sprite;
	}
	CC_SAFE_DELETE(sprite);
	return nullptr;
}
ログイン後にコピー

上边就是使用二段构建模式的过程,Sprite首先调用new来分配内存空间,然后调用init函数来完成初始化的工作,顺带还做了内存管理的工作,最后返回初始化好的对象。所以看了Sprite的create方法的实现,我们也知道了应该怎么使用这个二段构建模式了吧。

二、为什么要这么用?

       c++程序员来说初始化工作不都是在构造函数中完成的吗,cocos中为何要这么做呢?

     这里引述一下王哲的话:“其实我们设计二段构造时首先考虑其优势而非兼容cocos2d-iphone. 初始化时会遇到图片资源不存在等异常,而C++构造函数无返回值,只能用try-catch来处理异常,启用try-catch会使编译后二进制文件大不少,故需要init返回bool值。Symbian(qt), Bada SDK,objc的alloc + init也都是二阶段构造”。现在大家明白了吧,兼容Cocos2d-iPhone是一个原因,另一个重要的原因是构造函数没有返回值啊,如果加载资源图片的时候不存在怎么办,所以初始化的工作写在init函数中,这个函数返回的bool值用来判断是否初始化成功。使用这种方法还可以强化设计,想想自己写代码的时候是不是因为没有初始化某个成员变量导致了bug,这样做就是提醒你记得要在init中初始化成员变量。通过create静态函数返回的这个对象也实现了Cocos2dx中的内存管理,就不用我们自己麻烦了。还有一个原因是在C++的构造函数中是不能调用虚函数的,为了调用虚函数来完成一些功能就要写在init函数中。



        以上就是二段构建模式的说明了,在我们写cocos程序的时候其实不知不觉就已经在使用这个构建模式了,想一下我们一个类继承了Layer,然后使用了宏CREATE_FUNC(),这不就是create静态方法吗,在init函数中完成了初始化,整个过程就是在用这种设计模式!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WeChat の「おやすみモード」は何をするのですか? WeChat の「おやすみモード」は何をするのですか? Feb 23, 2024 pm 10:48 PM

WeChat のサイレント モードとはどういう意味ですか? 現在、スマートフォンの人気とモバイル インターネットの急速な発展により、ソーシャル メディア プラットフォームは人々の日常生活に欠かせないものとなっています。 WeChat は中国で最も人気のあるソーシャル メディア プラットフォームの 1 つであり、ほとんどの人が WeChat アカウントを持っています。私たちは WeChat を通じて友人、家族、同僚とリアルタイムでコミュニケーションを取り、生活の瞬間を共有し、お互いの現在の状況を理解することができます。しかし、この時代では、特に集中力や集中力が必要な人々にとって、情報過多やプライバシー漏洩の問題にも必然的に直面します。

iPhoneのスリープモードは何に使用されますか? iPhoneのスリープモードは何に使用されますか? Nov 04, 2023 am 11:13 AM

iOS デバイスでは、ヘルスケア アプリを使用して睡眠パターンなどを追跡できるようになってきました。でも、寝ているときに通知が来ると煩わしくありませんか?これらの通知は無関係である可能性があるため、その過程で睡眠パターンが混乱します。おやすみモードは、睡眠中に気を散らすのを避けるための優れた方法ですが、夜間に受信する重要な電話やメッセージを見逃す可能性があります。ありがたいことに、ここでスリープモードが登場します。それについてさらに詳しく、そしてiPhoneでそれを使用する方法を学びましょう。 iPhone ではスリープ モードはどのような役割を果たしますか? スリープ モードは iOS 専用のフォーカス モードで、「ヘルスケア」アプリの睡眠スケジュールに基づいて自動的に有効になります。アラームを設定するのに役立ちます。

iPhoneでサイレントモードが機能しない:修正 iPhoneでサイレントモードが機能しない:修正 Apr 24, 2024 pm 04:50 PM

おやすみモードで電話に応答することさえ、非常に煩わしい経験になる可能性があります。名前が示すように、おやすみモードでは、すべての着信通知と電子メール、メッセージなどからの警告がオフになります。これらのソリューション セットに従って問題を修正できます。解決策 1 – フォーカス モードを有効にする 携帯電話でフォーカス モードを有効にします。ステップ 1 – 上から下にスワイプしてコントロール センターにアクセスします。ステップ 2 – 次に、携​​帯電話の「フォーカスモード」を有効にします。フォーカス モードでは、電話機のサイレント モードが有効になります。携帯電話に着信通知が表示されることはありません。解決策 2 – フォーカス モード設定を変更する フォーカス モード設定に問題がある場合は、修正する必要があります。ステップ 1 – iPhone の設定ウィンドウを開きます。ステップ 2 – 次に、フォーカス モード設定をオンにします

カスタム WordPress ユーザー フローの構築、パート 3: パスワードのリセット カスタム WordPress ユーザー フローの構築、パート 3: パスワードのリセット Sep 03, 2023 pm 11:05 PM

このシリーズの最初の 2 つのチュートリアルでは、新しいユーザーのログインと登録のためのカスタム ページを作成しました。さて、ログイン フローのうち調査して置き換える部分は 1 つだけ残っています。ユーザーがパスワードを忘れて WordPress パスワードをリセットしたい場合はどうなりますか?このチュートリアルでは、最後のステップに取り組み、シリーズ全体で構築してきたパーソナライズされたログイン プラグインを完成させます。 WordPress のパスワード リセット機能は、今日の Web サイトの標準的な方法にほぼ準拠しています。ユーザーは、ユーザー名または電子メール アドレスを入力し、WordPress にパスワードのリセットを要求することによってリセットを開始します。一時的なパスワード リセット トークンを作成し、ユーザー データに保存します。このトークンを含むリンクがユーザーの電子メール アドレスに送信されます。ユーザーがリンクをクリックします。重い中で

iPhone 15 Pro: ステータスバーのマナーモード記号を削除する方法 iPhone 15 Pro: ステータスバーのマナーモード記号を削除する方法 Sep 24, 2023 pm 10:01 PM

iPhone 15 Pro および iPhone 15 Pro Max モデルで、Apple は、音量ボタンの上にある従来の着信音/サイレント スイッチに代わる、物理的にプログラム可能なアクション ボタンを導入しました。アクション ボタンは、いくつかの異なる機能を実行するようにプログラムできますが、サイレント モードと着信モードを切り替える機能はなくなっていません。デフォルトでは、アクション ボタンを長押しするとデバイスが沈黙し、ボタンの触覚フィードバックが 3 回脈動します。どちらの iPhone 15 Pro モデルでも、ステータス バーの時刻の横に取り消し線のベル記号が表示され、サイレント/サイレント モードが有効になっていることを示します。また、アクション ボタンを再度長押ししてデバイスのミュートを解除するまで、この状態が維持されます。 iPhoneをマナーモードにしたい場合

「Notepad++ ダーク モード」と「Notepad++ ダーク テーマ」を有効にするにはどうすればよいですか? 「Notepad++ ダーク モード」と「Notepad++ ダーク テーマ」を有効にするにはどうすればよいですか? Oct 27, 2023 pm 11:17 PM

Notepad++ ダーク モード v8.0 にはパラメータがありません。Notepad++ は最も便利なテキスト エディタです。 Windows 10 で実行されるすべてのアプリはダーク モードをサポートしています。 Chrome、Firefox、Microsoft Edge などの Web ブラウザーに名前を付けることができます。 Notepad++ で作業している場合、デフォルトの白い背景が目を痛める可能性があります。開発者は Notepad++ のバージョン 8 にダーク モードを追加しました。これをオンにする方法は次のとおりです。 Windows 11/10 ++ ダーク モードのメモ帳を有効にする メモ帳 ++ を起動する 「設定」 > 「環境設定」 > 「ダーク モード」をクリックします 「ダーク モードを有効にする」を選択してメモ帳を再起動します

ラップトップは毎回シャットダウンする必要がありますか? ラップトップは毎回シャットダウンする必要がありますか? Feb 19, 2024 pm 12:09 PM

Windows ラップトップには休止状態とシャットダウンのオプションが付属しています。ラップトップをスリープ モードにすると、低電力モードになり、そのままの状態で作業を続けることができます。ラップトップをシャットダウンした場合は、すべてのプログラムと作業内容を閉じて、最初からやり直す必要があります。一日中ラップトップを使用せずに休憩したい場合は、スリープ モードまたは休止状態モードが良い選択肢です。ドアを閉めるのはどうですか?ラップトップは毎回シャットダウンする必要がありますか?確認してみましょう。ラップトップは毎回シャットダウンする必要がありますか?特に長期間使用しない場合は、エネルギーを節約し、デバイスの寿命を延ばすためにラップトップの電源を切ることをお勧めします。ただし、日中はラップトップをスリープ モードにしてタスクを続行することをお勧めします。

スムーズなビルド: Maven イメージ アドレスを正しく構成する方法 スムーズなビルド: Maven イメージ アドレスを正しく構成する方法 Feb 20, 2024 pm 08:48 PM

スムーズなビルド: Maven イメージ アドレスを正しく構成する方法 Maven を使用してプロジェクトをビルドする場合、正しいイメージ アドレスを構成することが非常に重要です。ミラー アドレスを適切に構成すると、プロジェクトの構築を迅速化し、ネットワークの遅延などの問題を回避できます。この記事では、Maven ミラー アドレスを正しく構成する方法と、具体的なコード例を紹介します。 Maven イメージ アドレスを構成する必要があるのはなぜですか? Maven は、プロジェクトの自動構築、依存関係の管理、レポートの生成などを行うことができるプロジェクト管理ツールです。 Maven でプロジェクトをビルドする場合、通常は

See all articles