我很久没有使用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循环中取本地地址。 更喜欢在每次循环时在堆上创建新对象 – Sarang