Sadece std::map
'un içinde ayrılmak üzere kısıtlamak istediğim bir nesnem var. AmacıylaStd :: map'e aktarılamaz ve taşınamaz bir nesne nasıl ayrılır?
#include <map>
class Value
{
public:
Value(int value) { _value = value;}
Value(const Value&) = delete;
Value& operator=(const Value&) = delete;
Value(Value&&) = default; // ***
void* operator new(size_t) = delete; // not on free store
private:
int _value;
};
class Container
{
public:
Container();
Value* addToMap(int key) {
auto ret = _map.emplace(key, key);
return &(ret.first->second);
}
private:
std::map<int, Value> _map;
};
ben varsayılan hareket yapıcı talep eden yıldız işaretleriyle işaretlenmiş bir çizgi eklemek zorunda clang kullanarak Mac'te derlemek yapmak: İşte basitleştirilmiş bir koddur. Ancak bu satır, Windows Visual Studio'da derlendiğinde C2610 hatasına neden olur. VS2013 C++ 11 uyumsuzluğu, varsayılan taşıma yapıcılarını üretememeyi de içerir. Standart harita içinde bir nesneyi platformlar arasında derleyeceğim veya kendi hareket ettiren kurucuyu uygulamak zorunda mıyım?
Neden bu kısıtlamayı eklemek istersiniz? –
Nesnenin yalnızca kapsayıcı tarafından sahiplenilmesini ve diğer kodların yeni ve silinmesini engellemesini istiyorum. – LRaiz
Nesneleri ve veri yapılarını karıştırıyorsunuz. Veri yapınızın kullanıcısı nesneyi kopyalamak istiyorsa, neden olmasın? –