【问题标题】:Constructing array构造数组
【发布时间】:2014-01-19 15:46:16
【问题描述】:

如何在运算符new[]中调用特定的类构造函数?

#include <iostream>

class foo
{
  public:
    foo(){std::cout << "\nfoo::foo()\n";}
    foo(int param){std::cout << "\nfoo::foo(int)\n";}
};

int main()
{
  foo* my_array = new foo[45];
  return 0;
}

foo* my_array = new foo[45]; 将调用 foo() 构造函数。如何调用foo(int)构造函数?

【问题讨论】:

标签: c++ class constructor new-operator


【解决方案1】:

无法对原始数组执行此操作。您可以使用 std::vectors' 获得类似的结果 explicit vector (size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type());:

std::vector<foo> my_vector(45, 10);

将使用 45 个 foo 对象创建向量,每个对象都是通过 foo(10) 构造函数调用创建的。

【讨论】:

  • 您可以将其缩短为std::vector v(45, 10);
  • 你是不是漏掉了模板参数?还值得注意的是,构造函数只被调用一次。其他元素将通过副本,因此管理资源的对象必须具有适当的复制构造函数。
  • 一种方法可以对数组执行此操作,只是对于长数组来说有点乏味。
猜你喜欢
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多