国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

機(jī)關(guān)事業(yè)單位網(wǎng)站備案谷歌瀏覽器下載

機(jī)關(guān)事業(yè)單位網(wǎng)站備案,谷歌瀏覽器下載,c語言和網(wǎng)站建設(shè)的關(guān)系,南通快速建站公司注意:復(fù)現(xiàn)代碼時(shí),確保 VS2022 使用 C17/20 標(biāo)準(zhǔn)以支持現(xiàn)代特性。 克隆對象的效率革命 1. 模式定義與用途? ? 核心思想? ?原型模式:通過復(fù)制現(xiàn)有對象?(原型)來創(chuàng)建新對象,而非通過new構(gòu)造。?關(guān)鍵用…

注意:復(fù)現(xiàn)代碼時(shí),確保 VS2022 使用 C++17/20 標(biāo)準(zhǔn)以支持現(xiàn)代特性。

克隆對象的效率革命


1. 模式定義與用途?

?

核心思想?

  • ?原型模式:通過復(fù)制現(xiàn)有對象?(原型)來創(chuàng)建新對象,而非通過new構(gòu)造。?
  • 關(guān)鍵用途:
    1.減少初始化開銷:適用于創(chuàng)建成本高的對象(如數(shù)據(jù)庫連接)。
    2.?動(dòng)態(tài)配置對象:運(yùn)行時(shí)通過克隆生成預(yù)設(shè)配置的實(shí)例。
    ?

經(jīng)典場景?

  • 游戲開發(fā):批量生成相同屬性的敵人或道具。
  • 文檔編輯:復(fù)制帶格式的文本段落。

2. 模式結(jié)構(gòu)解析?

UML類圖

+---------------------+          +---------------------+  
|    Prototype        |          |       Client        |  
+---------------------+          +---------------------+  
| + clone(): Prototype|<>------->| - prototype: Prototype  
+---------------------+          +---------------------+  ^  |  
+---------------------+  
| ConcretePrototype   |  
+---------------------+  
| + clone()           |  
+---------------------+  

角色說明?

  • Prototype:抽象接口,聲明克隆方法 clone()。
  • ConcretePrototype:具體原型類,實(shí)現(xiàn)克隆邏輯。
  • Client:通過調(diào)用 clone() 創(chuàng)建新對象。

3. 簡單示例:基礎(chǔ)克隆實(shí)現(xiàn)

#include <memory>  // 抽象原型接口  
class Enemy {  
public:  virtual ~Enemy() = default;  virtual std::unique_ptr<Enemy> clone() const = 0;  virtual void attack() const = 0;  
};  // 具體原型:骷髏戰(zhàn)士  
class SkeletonWarrior : public Enemy {  
public:  std::unique_ptr<Enemy> clone() const override {  return std::make_unique<SkeletonWarrior>(*this); // 調(diào)用拷貝構(gòu)造函數(shù)  }  void attack() const override {  std::cout << "骷髏戰(zhàn)士揮舞骨刀!\n";  }  
};  // 使用克隆  
auto original = std::make_unique<SkeletonWarrior>();  
auto clone = original->clone();  
clone->attack();  // 輸出:骷髏戰(zhàn)士揮舞骨刀!  

4. 完整代碼:原型管理器與深拷貝優(yōu)化

場景:游戲敵人原型注冊與批量生成

#include <iostream>  
#include <unordered_map>  
#include <memory>  
#include <string>  // 抽象敵人原型  
class Enemy {  
public:  virtual ~Enemy() = default;  virtual std::unique_ptr<Enemy> clone() const = 0;  virtual void spawn() const = 0;  virtual void setHealth(int health) = 0;  
};  // 具體原型:火焰惡魔  
class FireDemon : public Enemy {  
public:  FireDemon(int health, const std::string& color)  : health_(health), color_(color) {}  std::unique_ptr<Enemy> clone() const override {  return std::make_unique<FireDemon>(*this);  }  void spawn() const override {  std::cout << "生成" << color_ << "火焰惡魔(生命值:" << health_ << ")\n";  }  void setHealth(int health) override {  health_ = health;  }  private:  int health_;  std::string color_;  
};  // 原型管理器(注冊表)  
class PrototypeRegistry {  
public:  void registerPrototype(const std::string& key, std::unique_ptr<Enemy> prototype) {  prototypes_[key] = std::move(prototype);  }  std::unique_ptr<Enemy> createEnemy(const std::string& key) {  auto it = prototypes_.find(key);  if (it != prototypes_.end()) {  return it->second->clone();  }  return nullptr;  }  private:  std::unordered_map<std::string, std::unique_ptr<Enemy>> prototypes_;  
};  // 客戶端代碼  
int main() {  PrototypeRegistry registry;  // 注冊原型  registry.registerPrototype("red_demon", std::make_unique<FireDemon>(100, "紅色"));  registry.registerPrototype("blue_demon", std::make_unique<FireDemon>(80, "藍(lán)色"));  // 批量生成敵人  auto enemy1 = registry.createEnemy("red_demon");  auto enemy2 = registry.createEnemy("blue_demon");  auto enemy3 = registry.createEnemy("red_demon");  enemy1->spawn();  // 生成紅色火焰惡魔(生命值:100)  enemy2->spawn();  // 生成藍(lán)色火焰惡魔(生命值:80)  enemy3->setHealth(50);  enemy3->spawn();  // 生成紅色火焰惡魔(生命值:50)  
}  

5. 優(yōu)缺點(diǎn)分析

優(yōu)點(diǎn)??缺點(diǎn)
?避免重復(fù)初始化復(fù)雜對象需正確處理深拷貝(尤其含指針成員時(shí))
動(dòng)態(tài)添加/刪除原型配置每個(gè)類需實(shí)現(xiàn)克隆方法,增加代碼量
與工廠模式結(jié)合擴(kuò)展性強(qiáng)對簡單對象可能得不償失

6. 調(diào)試與優(yōu)化策略

調(diào)試技巧(VS2022)??

1.深拷貝驗(yàn)證

  • 在拷貝構(gòu)造函數(shù)中設(shè)置斷點(diǎn),觀察成員變量是否被正確復(fù)制。
  • 使用 ?內(nèi)存斷點(diǎn)? 檢測指針成員是否被重復(fù)釋放。

2.?原型注冊表檢查

  • 輸出注冊表的鍵列表,確認(rèn)原型是否成功注冊。
for (const auto& pair : prototypes_) {  std::cout << "已注冊原型: " << pair.first << "\n";  
}  

性能優(yōu)化?

1.原型預(yù)初始化

  • 在程序啟動(dòng)時(shí)預(yù)加載常用原型,減少運(yùn)行時(shí)開銷。

2.淺拷貝優(yōu)化

  • 對只讀數(shù)據(jù)成員使用淺拷貝(需確保生命周期安全)。
class CheapToCopyEnemy : public Enemy {  
private:  const Texture* sharedTexture_;  // 只讀資源,淺拷貝  
};  
http://aloenet.com.cn/news/47811.html

相關(guān)文章:

  • ibm網(wǎng)站導(dǎo)航特效代碼信息流廣告投放平臺
  • 高端做網(wǎng)站哪家好百度一下官網(wǎng)首頁登錄
  • 臺州網(wǎng)站建設(shè)優(yōu)化深圳seo推廣
  • 金華專業(yè)做網(wǎng)站建站推廣
  • 互聯(lián)網(wǎng)金融網(wǎng)站設(shè)計(jì)百度收錄查詢工具
  • 模型下載網(wǎng)站開發(fā)流程廣州網(wǎng)頁制作
  • 網(wǎng)站建設(shè)月總結(jié)怎么做百度關(guān)鍵詞排名
  • 網(wǎng)站首頁的動(dòng)態(tài)視頻怎么做的公司seo排名優(yōu)化
  • 給網(wǎng)站做插畫分辨率seo也成搜索引擎優(yōu)化
  • 北京網(wǎng)站建設(shè)天下公司網(wǎng)絡(luò)營銷品牌
  • 公司怎么建網(wǎng)站做推廣日本疫情最新數(shù)據(jù)
  • 棗莊三合一網(wǎng)站開發(fā)百度安裝應(yīng)用
  • 實(shí)時(shí)視頻網(wǎng)站怎么做網(wǎng)站百度推廣
  • 新鄉(xiāng)網(wǎng)站開發(fā)的公司電話在線服務(wù)器網(wǎng)站
  • 黃金網(wǎng)站網(wǎng)址免費(fèi)百度網(wǎng)訊科技有限公司官網(wǎng)
  • 做網(wǎng)站好處小程序制作一個(gè)需要多少錢
  • 簡單做網(wǎng)站的價(jià)格網(wǎng)頁設(shè)計(jì)一般用什么軟件
  • 北京網(wǎng)站優(yōu)化排名推廣站長工具網(wǎng)站查詢
  • 個(gè)人適合建什么網(wǎng)站廈門seo關(guān)鍵詞
  • 垡頭做網(wǎng)站的公司2021年網(wǎng)絡(luò)熱點(diǎn)輿論
  • 四川綿陽網(wǎng)站建設(shè)百度認(rèn)證證書
  • 自己做的網(wǎng)站怎么上網(wǎng)百度站長平臺快速收錄
  • 專業(yè)做鞋子網(wǎng)站百度競價(jià)排名是什么
  • 中小學(xué)學(xué)校網(wǎng)站建設(shè)seo入門教程seo入門
  • 便宜的網(wǎng)站設(shè)計(jì)企業(yè)查詢官網(wǎng)入口
  • 遂寧網(wǎng)站開發(fā)廣告軟文小故事800字
  • 做社交網(wǎng)站有哪些全世界足球排名前十位
  • 小程序平臺商城seo搜索引擎優(yōu)化實(shí)戰(zhàn)
  • 建設(shè)企業(yè)網(wǎng)站目的查看域名每日ip訪問量
  • 中工信融營銷型網(wǎng)站建設(shè)百度精準(zhǔn)獲客平臺