gpt4 book ai didi

c++ - 分配给 map 时构造的两个对象

转载 作者:行者123 更新时间:2023-11-28 02:24:02 24 4
gpt4 key购买 nike

我正在尝试将对象存储在我的 map 中,但显然当我尝试分配一个新对象时,它们被构造了两次,一个被立即销毁。有什么方法可以在 map 中创建本地对象,还是必须存储指针?

std::map<std::wstring,Bitmap> bitmaps;
void loadBitmaps(){
for(auto f: listdir("bitmaps")) {
std::wcout << "loading: " << f << std::endl;
bitmaps[f] = Bitmap(f);
std::wcout << "loaded\n";
}
}

这是输出:

loading: bitmap1.bmp
created with file constructor
created with empty constructor
destructed (the one with the file constructor)
loaded

最佳答案

首先,map是空的。当您调用 bitmaps[f] ,键的条目 f与默认构造值一起创建。这是 empty constructor你看到的。所以在这种情况下:

  1. Bitmap 的(临时)实例是通过 Bitmap(f) 构建的
  2. 默认构造的位图是通过bitmaps[f]构造的
  3. 临时位图通过Bitmap & Bitmap::operator=(Bitmap &&)分配给默认构造的位图或 Bitmap & Bitmap::operator=(Bitmap &&) , 取决于 Bitmap 的实现。

我推荐使用 bitmaps.emplace(f, f)相反。

关于c++ - 分配给 map 时构造的两个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31347896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com