我有这样的代码:
template <class T>
struct Rgb
{
T *r, *g, *b;
Rgb(int nr, int ng, int nb)
{
r = new T(nr);
g = new T(ng);
b = new T(nb);
}
Rgb(int n)
{
Rgb(n, n, n);
}
~Rgb()
{
delete r;
delete g;
delete b;
}
};
我已经这样做了,因为我希望能够创建像:
这样的对象 Rgb<std::vector<int>> a(10); // so it creates 3 vectors inside,
// each with 10 elements or
Rgb<std::deque<double>> a(2, 5, 4); // so it creates 3 deques inside
// with different sizes
但我上面给出的实现不起作用。请帮帮我...谢谢...
答案 0 :(得分:1)
如果您的编译器支持constructor delegation(例如Clang 3.2),您可以执行以下操作:
Rgb(int n) : Rgb(n, n, n)
{
}
您正在做的是在构造函数中构建一个临时Rgb实例,一旦未初始化的r
,g
和b
被删除,该实例将失败。
否则我建议创建一个执行初始化的公共init
函数或简单地复制代码。正如评论所指出的那样,你不应该在这里使用new
(这几乎总是现代C ++代码中的代码味道)。把它们结合在一起:
template <class T>
struct Rgb
{
T r, g, b;
Rgb(int nr, int ng, int nb) : r(nr), g(ng), b(nb)
{ }
Rgb(int n) : r(n), g(n), b(n)
{ }
~Rgb()
{ }
};