为什么我不能将m_data
数组作为这样的成员?
class Array
{
private:
const int m_capacity;
int m_data[m_capacity];
public:
Array(const int capacity = 100);
};
Array::Array(const int capacity /*= 100*/)
: m_capacity(capacity)
{
}
如何在没有动态内存分配的情况下实现这一目标?
答案 0 :(得分:5)
在这种情况下,编译器无法知道class Array
的大小,也无法确定此类对象的大小。如果允许不确定编译时大小的对象,则整个语言将有所不同。
但是,如果您在编译时知道容量,则可以编写
template <int Size = 100>
class Array
{
private:
int m_data[Size];
public:
Array();
};
然后,要使用它,你可以
Array<> a; //size = 100
Array<250> b; //size = 250
正如@Superlokkus在评论中提到的,C ++ 11 std::array
只是一个具有相同概念的更好的实现。
答案 1 :(得分:2)
我建议使用std :: array而不是构建自己的轮
#include <array>
template< unsigned long N >
using Array = std::array<int, N>;
并使用Array
作为普通的模板类
Array<100> arr;
如果你热衷于100个大小的阵列,那就更简单了
using Array = std::array<int, 100>;
Array arr;
答案 2 :(得分:2)
您可以声明像这样的模板类
var Person = [String:String]()
或者您应该使用数据成员
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
cell.layer.backgroundColor = UIColor.clearColor().CGColor
cell.layer.shadowColor = UIColor.blackColor().CGColor
cell.layer.shadowOffset = CGSizeZero
cell.layer.shadowRadius = 4
cell.layer.shadowOpacity = 0.5
cell.layer.shadowPath = UIBezierPath(rect: cell.bounds).CGPath
cell.layer.masksToBounds = false
}
而不是数组。
答案 3 :(得分:0)
在没有动态分配的情况下,您不能拥有在运行时选择其大小的对象。你可以在没有裸new
/ delete
的情况下拥有它;封装该要求的普通类是std::vector
。
或者,您可以拥有一系列不同大小的课程。正常的类是std::array
。