假设我有一个基类Animal与虚函数和一些派生类(Cat,Dog等).实际派生类包含4-8个字节的数据.我想存储一个std::list<Animal>实际上包含派生对象的项目.我想避免使用new在堆上创建许多小对象.
有没有可用于实现此目的的设计模式?
编辑:我的想法来实现这一点
std::deque<Cat>,std::deque<Dog>...; std::list<Animal*>包含指针的商店deques; 我使用的是std::deque因为我认为它具有良好的内存管理和大量的对象;我有一个类,其成员不会被类的方法改变,所以我将其标记为const.我的问题是我使用默认赋值运算符就像复制构造函数一样,以避免多个声明.但在这种情况下,赋值运算符不会自动生成,因此我得到了一些编译器错误:
'operator =' function is unavailable.这似乎没有真正的生活场景,其中可以实际使用const类成员(例如,你在STL代码中看到过任何const成员吗?).
有没有办法解决这个问题,除了删除const?
编辑:一些代码
class A
{
public :
const int size;
A(const char* str) : size(strlen(str)) {}
A() : size(0) {}
};
A create(const char* param)
{
return A(param);
}
void myMethod()
{
A a;
a = create("abcdef");
// do something
a = create("xyz");
// do something
}
Run Code Online (Sandbox Code Playgroud) .NET String对象是否可能包含无效的Unicode代码点?
如果是,可能会发生这种情况(如何确定字符串是否具有此类无效字符)?
为了引用计数,使用std :: tr1 :: shared_ptr和下面的示例代码一样安全正确吗?(这只是一个特定的示例,该类可以包含任何其他内容(void*)而不是FILE*)
class File
{
public:
File(const char* path, const char* mode) :
_refcount(new int(0))
{
this->_file = fopen(path, mode);
}
~File()
{
if (this->_refcount.unique())
{
if (this->_file != NULL)
{
fclose(this->_file);
}
}
}
int write(void* buff, size_t size)
{
fwrite(buff, size, 1, this->_file);
}
private:
FILE* _file;
std::tr1::shared_ptr<int> _refcount;
};
Run Code Online (Sandbox Code Playgroud) 如何检查一个Double值是否Infinity在 Haskell 中?