gpt4 book ai didi

c++ - 在同一内存地址不需要的对象创建

转载 作者:行者123 更新时间:2023-11-30 02:02:20 25 4
gpt4 key购买 nike

我已经很长时间没有使用 C++ 了,现在我需要做一些小“项目”。
我回顾了几个主题,试图为我的问题找到解决方案,但没有结果...

这是“伪代码”(Pair 是我的类):

Pair** pairs;

我从输入中获取表的大小并创建指针表:

pairs = new Pair*[size];

我有一个循环,它创建一些对象并将其引用放入指针表中。或多或少:

while (...)
{
Pair pair(...); // calling constructor, creating object type of Pair.
pairs[i] = &pair;
i++;
}

问题&pair 每次(循环的每一步)都是相同的数字。假设第一个创建对象的地址是 1234。因此,循环中的每一步都会覆盖 1234 处的这个对象。因此 pairs 中的每个指针都指向相同的地址 -> 相同的对象。我想强制在内存中的新位置创建这个对象。

我一直在尝试将这些对象放入其他表中,然后将它们的引用传递给指针表:

Pair* clearPairs = new Pair[size];
while (...)
{
clearPairs[i] = Pair(...);
pairs[i] = &clearPairs[i];
i++;
}

但问题依旧。

任何提示?我的代码(或想法)中的错误/错误?我应该实现一些“复制构造函数”吗?

最佳答案

while (...)
{
Pair pair(...); // calling constructor, creating object type of Pair.
pairs[i] = &pair;
i++;
}

pair 分配有自动存储持续时间,并在循环的每次迭代时超出范围。您正在保存指向无效对象(其中一堆)的指针。

如果您真的需要指针,您应该使用智能指针的集合(当对象不能被复制或复制很昂贵时这是真的),这可能根本没有必要。试试这个:

vector<Pair> pairs;
// and if you need pointers...
vector<unique_ptr<Pair>> pairs;

while(whatever) {
pairs.push_back(Pair(...));
// or...
pairs.push_back(unique_ptr<Pair>(new Pair(...)));
}

关于c++ - 在同一内存地址不需要的对象创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13325405/

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