1

代码如下:

编码 :

#include <iostream>

using namespace std;

class pub
{
    string name;

    public:
    pub(string name):name(name){}    //Constructor
    void getName(string name){this->name = name;}
    string returnName(void){return name;}
};

int main(void)
{
    pub * p = new pub[5]; //Error-prone statement.

                          //Ignore for not having "delete" statement

    return 0;
}

问题:

1.)在这种情况下,我有什么方法可以将值传递给我分配的每个动态内存,还是我必须为构造函数的参数设置一个默认值才能规避这个问题?

谢谢 !

4

3 回答 3

3

如果您的编译器支持 C++11,您可以使用std::vector并带有初始化列表:

std::vector<pub> v { pub("1"), pub("2") };

请参阅在线演示https://ideone.com/Qp4uo

或者std::array

std::array<pub, 2> v = { { pub("1"), pub("2") } };

请参阅在线演示https://ideone.com/lBXUS

delete[]其中任何一个也消除了动态分配数组的负担。

于 2012-08-14T15:08:51.890 回答
1

除了您使用的有点不合常规的命名约定(我更改getName()setName()and returnName()getName()并使用尾随_表示私有数据成员)之外,使用 `std::vector 将自动为您进行内存管理:

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

class pub
{
public:
    pub(): name_("default") {}
    pub(string const& name): name_(name){}    //Constructor
    pub(const char* name): name_(name) {}
    void setName(string const& name){ name_ = name;}
    string getName(void) const {return name_;}

private:
    string name_;
};

int main(void)
{
    // initialize with 2 elements, then add 3 more default elements
    std::vector<pub> pub_vec { "bla", "bar" };
    pub_vec.resize(5);

    std::for_each(pub_vec.begin(), pub_vec.end(), [](pub const& elem){
        std::cout << elem.getName() << "\n";
    });

    return 0;
}   // 5 destructors automatically called

注意:添加一个重载的构造函数const char*允许你使用字符串文字来初始化你的数据。

Ideone上输出

于 2012-08-14T15:10:55.523 回答
0

使用std::vector<pub>. 它不需要默认构造函数。

例如

std::vector<pub> vec(5, pub("xyz"));

创建一个具有 5 个相等元素的向量。

于 2012-08-14T15:06:24.603 回答