我写了这段代码.
构造函数正常工作,但在析构函数中,我得到"Windows触发了一个断点".我该怎么纠正这个?
template class CyclicalArray {
private:
T* mem_ptr;
public:
CyclicalArray(size_t capacity, const T& default_value) {
this->default_value = default_value;
this->capacity = capacity;
head_index = 0;
mem_ptr = ::new T[capacity]; //memory allocating
for(T* p = mem_ptr; p < mem_ptr + capacity * sizeof(T); p += sizeof(T)) {
::new (p) T (default_value); //initialization
}
}
~CyclicalArray() {
for(T* p = mem_ptr + sizeof(T); p < mem_ptr + capacity * sizeof(T); p += sizeof(T)) {
p->~T();
}
delete[] mem_ptr;
}
Run Code Online (Sandbox Code Playgroud) 我有一个包含字符串的结构.像这样的东西:
struct Chunk {
int a;
string b;
int c;
};
所以,我想,我不能使用fread和fwrite函数从文件中读写这个结构.因为字符串可能会保留不同的内存容 但这样的代码工作正常.
Chunk var;
fwrite(&var, sizeof(Chunk), 1, file);
fread(&var, sizeof(Chunk), 1, file);
它真的有些问题吗?
作为练习,我希望创建一个不能超过N个实例的类.我怎样才能做到这一点?
例如,假设您要限制与数据库的连接数,以便不超过N个用户可以同时连接.我理解如何制作一个单身人士:
class Singleton {
private:
Singleton(const Singleton&);
Singleton();
public :
static Singleton Instance() {
static Singleton p;
if(!p) {
p = new Singleton;
}
};
Run Code Online (Sandbox Code Playgroud)
但如果N> 1个对象,我需要帮助.