【发布时间】:2019-12-20 22:30:03
【问题描述】:
在下面的代码中,一个类拥有一个动态分配的数组。它通过一个隐式转换为const 的公共方法公开对该数组的只读访问。
#include <array>
template <class T, std::size_t N>
class A {
const unsigned int size;
std::array<T, N> *s;
public:
A(const unsigned int _size, const std::array<T, N>& def) :
size(_size),
s(new std::array<T, N>[size])
{
for (unsigned int i = 0; i < size; i++)
s[i] = def;
}
~A() { delete[] s; }
std::array<T, N> const* const conf() const { return s; }
};
int main()
{
A a(10, std::array<int, 3>{0, 0, 0});
auto x = a.conf();
return 0;
}
A::conf() 中的隐式 const 转换是否会产生开销(例如通过调用 A::s 元素的复制构造函数)?
【问题讨论】:
-
我认为您重新设计了代码,因为它是半封装的。您隐藏了内存管理,但没有隐藏您拥有数组的事实。至少,使用
std::vector而不是 C 风格的数组,你会得到size、迭代器等等。 -
你的代码的另一个问题是它不遵循5的规则。例如
A的复制构造会导致灾难。 -
@Phil1970 我同意,但添加所需的复制构造函数不会改变问题。