gpt4 book ai didi

c++ - 用 malloc 替换 operator new

转载 作者:太空宇宙 更新时间:2023-11-04 14:39:24 25 4
gpt4 key购买 nike

<分区>

我正在尝试用 malloc 和 free 替换 operator new 和 delete(我有理由这样做)。问题如下代码所示:

std::string *temp = (std::string *)malloc(sizeof(std::string) * 2); // allocate space for two string objects.
temp[0] = "hello!";
temp[1] = "world!";
for(int i = 0; i < 2; i++)
{
printf("%s\n", temp[i].c_str());
}
free(temp);
return 0; // causes SIGSEGV.

然而..

std::string *temp = new std::string[2];
temp[0] = "hello!";
temp[1] = "world!";
for(int i = 0; i < 2; i++)
{
printf("%s\n", temp[i].c_str());
}
delete [] temp;
return 0; // works fine

为什么?谁能建议我用 malloc 和 free 替换这些运算符的正确方法是什么?

问候。

编辑:这只是示例,我没有使用标准 C++ 库。

编辑:像这样的事情怎么样?

class myclass
{
public:
myclass()
{
this->number = 0;
}
myclass(const myclass &other)
{
this->number = other.get_number();
}
~myclass()
{
this->number = 0;
}
int get_number() const
{
return this->number;
}
void set_number(int num)
{
this->number = num;
}
private:
int number;
};

int main(int argc, char *argv[])
{
myclass m1, m2;
m1.set_number(5);
m2.set_number(3);

myclass *pmyclass = (myclass *)malloc(sizeof(myclass) * 2);

pmyclass[0] = myclass(m1);
pmyclass[1] = myclass(m2);

for(int i = 0; i < 2; i++)
{
printf("%d\n", pmyclass[i].get_number());
pmyclass[i].myclass::~myclass();
}

free(pmyclass);

return 0;
}

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com