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 数据类型的指针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'
相关文章:
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 为什么当我们有常量引用时创建临时对象?
- 为什么我们再次从结构对象创建结构变量?
- 如果我们不创建一个新节点并使用指针插入数据并建立链接(在链表中)怎么办?
- 如果普通默认构造函数不执行任何操作,为什么我们不能使用 malloc 创建平凡可构造的对象?
- 我们可以在c++中多次创建相同名称的对象吗
- 为什么我们需要创建一个单参数构造函数来使用临时的无名称对象
- 当我们在C++中创建类的对象时,为成员函数分配的内存在哪里?
- 我们可以在层次结构中创建多个纯虚拟接口及其实现而不会代码爆炸吗?
- 为什么我们不能用抽象类创建容器?
- 为什么我们可以创建一个模板类结构,其中包含许多与声明结构时指定的参数不同的参数
- 我们不能在不使用指向对象的指针的情况下创建节点C++吗?
- 为什么我们需要在堆中创建一个对象
- 为什么我们使用指针而不是简单地创建特定尺寸的数组
- 类介绍 (c++) 项目希望我们创建两个构造函数,但它们都不需要任何参数 - 我应该在这里做什么?
- 为什么我们在这里创建朋友函数.C
- 为什么我们在这里创建两个PQ
- 我们可以为每个类对象创建每个Boost Logger实例吗?
- 如果在编译时间中创建虚拟表,那么为什么我们将其称为运行时间多态性
- 我们可以使用mfc应用程序创建pdf文件吗