1
RAIIの機能のために、私のオブジェクトはスタック上にのみ配置可能で、オブジェクトの作成は特殊なファクトリに委譲される必要があります。つかいます。C++非ヒープ保護されたコンストラクタとコピーコンストラクタを使用したファクトリオブジェクトの作成
だから私はこのようなことをしました。
template<typename Product, Args ... >
class Creator : public Product
{
public:
static Product create(Args ... args)
{
return Product(args ...);
}
};
class ProtectedClass
{
ProtectedClass(const ProtectedClass& aThat)=delete;
ProtectedClass& operator=(const ProtectedClass& aThat)=delete;
protected:
ProtectedClass(){}
};
class Spawner
{
public:
ProtectedClass getProtectedClass()
{
return Creator<ProtectedClass>::create();
}
}
int main()
{
Spawner spawner;
//I need protectedClass to be enclosed within this frame
ProtectedClass protectedClass = spawner.getProtectedClass(); // err copy constructor is delted
}
私はこの
template<typename Product, Args ... >
class Creator : public Product
{
public:
Creator(Args ... args) : product_(args ...){}
Product& get() const
{
return product_;
}
private:
Product product_;
};
class Spawner
{
public:
std::unique_ptr<Creator<ProtectedClass>> getProtectedClassCreator()
{
return new Creator<ProtectedClass>();
}
}
int main()
{
Spawner spawner;
std::unique_ptr<Creator<ProtectedClass>> creator = std::move(spawner.getProtectedClassCreator());
ProtectedClass& protectedClass = creator->get();
}
ような何かを行うことができますしかし、右に見えるように思われません。
これに対処する他の方法は何ですか?
私はunique_ptrのために行きました。 dtorsがすべての移動操作に関与している場合、多くの問題が発生しました。 – user1079475
@ user1079475あなたは私よりも優れたユースケースを知っています。しかし、私はあなたがスタック上のオブジェクトを望んだと思った? –
はい、私はそうしましたが、オブジェクトをメソッドスコープから呼び出しスコープに移動させることが多すぎます。これらのオブジェクトはmutex属性を持ち、ヒープ上でこれらのmutexを移動する必要があります。ほとんど利益のために最後に多すぎる問題 – user1079475