我有一个稀疏矩阵的类。假设它有一个 int 数据类型的指针a
作为私有数据成员。那么我的问题是,如果我创建两个B
和该类C
的对象,B
和C
都有一个指向同一位置a
指针,或者它们会做其他事情吗?
我在这里很困惑。
我的类中的实际指针被定义为私有成员,因此:
element* ele;
它在构造函数中分配
:ele = new element[this->num_non_zero];
现在我们可以看到您正在讨论的代码,您拥有的指针按以下方式声明和初始化(在构造函数中(:
Element *ele;
ele = new element[this->num_non_zero];
new
的使用为每个实例提供了自己的内存副本,它们自己的ele
变量指向该副本。给定此方法,不同实例不可能相互干扰。
以下是原始答案,在您添加授权之前,我们可以简洁地回答您的问题。由于它提供了有趣的背景信息,所以我把它留了下来。
除非成员变量是类级静态变量(在类的所有实例之间共享(,否则它属于实例本身,并将指向它设置的任何位置(可能,但不一定,在构造函数中(。
例如,请参阅以下代码,该代码同时具有静态和非静态成员变量:
#include <iostream>
#include <string>
class demo {
public:
demo(int newnonstat = 7, int newstat= 42): nonstat(newnonstat) {
std::cout << "createn";
stat = newstat;
}
void dump(std::string desc) {
std::cout << desc << ": " << nonstat << ' ' << stat << 'n';
}
private:
int nonstat;
static int stat;
};
int demo::stat;
int main() {
demo d1; d1.dump("d1");
demo d2(1, 2); d2.dump("d2"); d1.dump("d1");
}
它的输出显示了如何设置这两种类型的可能性(带有我添加的评论(:
create
d1: 7 42
create
d2: 1 2
d1: 7 2 <-- "corrupted" static
因此,除非它们是静态的,否则变量将是不同的。但是,作为指针,没有什么可以阻止指向同一事物的不同指针,这一切都归结为各种代码位将其设置的内容。
另一个例子,具有指向同一事物的不同指针:
#include <iostream>
#include <string>
class demo {
public:
demo(char *pStr) : m_pStr(pStr) {}
void dump(std::string desc) {
std::cout << desc << ": " << &m_pStr << ' ' << (void*)m_pStr << " '" << m_pStr << "'n";
}
private:
char *m_pStr;
};
int main() {
char buff[] = "same string";
demo d1(buff);
demo d2(buff);
d1.dump("d1");
d2.dump("d2");
}
输出显示指针,虽然不同(第二列是指针变量的地址(,但指向相同的事物(第三列和第四列(:
d1: 0x7ffea260c150 0x7ffea260c18c 'same string'
d2: 0x7ffea260c158 0x7ffea260c18c 'same string'