int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?

What is a pointer of int data type pointing at if is a private data member of a class and we create two objects of that class?

本文关键字:创建 我们 数据成员 对象 两个 如果 指针 数据类型 一个 int 是什么      更新时间:2023-10-16

我有一个稀疏矩阵的类。假设它有一个 int 数据类型的指针a作为私有数据成员。那么我的问题是,如果我创建两个B和该类C的对象,BC都有一个指向同一位置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'
相关文章: