আমি জানি std::array
যে স্ট্যাকটিতে সম্পূর্ণ বরাদ্দ, তবে এই প্রশ্নটি সুরক্ষা উদ্বেগ দ্বারা অনুপ্রাণিত যা দুটি জিনিস প্রয়োজন:
- এতে থাকা ডেটাটি
std::array
জিরোড বা ধ্বংসের এলোমেলোভাবে হবে - ডাটা
std::array
করা হবে লক , এই ধরনের এটি কখনও তন্ন তন্ন ক্র্যাশ বা swap 'র মেমরিতে ডিস্কে যায়
সাধারণত, এর সাথে std::vector
সমাধানটি হ'ল একটি কাস্টম বরাদ্দকারী তৈরি করুন যা এই জিনিসগুলি করে । তবে, এর জন্য std::array
, আমি কীভাবে এটি করব তা দেখছি না এবং তাই এই প্রশ্নটি।
আমি যা করতে পারি তা হ'ল:
template <typename T, std::size_t Size>
struct SecureArray : public std::array<T, Size>
{
static_assert(std::is_pod<T>::value, "Only POD types allowed")
static_assert(sizeof(T) == 1, "Only 1-byte types allowed")
virtual ~SecureArray()
{
std::vector<uint8_t> d = RandomBytes(Size); // generates Size random bytes
std::memcpy(this->data(), d.data(), Size);
}
}
তবে এতে স্পষ্টতই মেমরি লকিংয়ের অভাব রয়েছে এবং এর কার্য সম্পাদন স্কিমটিকে প্রথম স্থানে std::array
ব্যবহার করে অর্জন করা জটিল করে তোলে std::array
।
এর চেয়ে ভাল সমাধান আর কি আছে?