请考虑以下代码:
class test {
public:
int n;
test(int n) : n(n) {}
};
int main() {
vector<test> v;
test one(1), two(2);
v.push_back(one);
v.push_back(two);
// obviously doesn't work since a copy of the object is stored in
//the vector ==> different memory addess
test* p1 = &one;
// also doesn't work properly since when the object gets erased,
//this pointer is pointing to a different object
test* p2 = &v[0];
v.erase(v.begin());
// prints 2 since object two was copied to the place of object one
cout << p2->n << endl;
return 0;
}
我想要一个指针,指向一个特定的对象,在一个向量,当耳环这个对象,指针也应该被删除,或指向空或类似的东西。同样,当我有一个指向矢量位置3的对象的指针时,我希望这个指针在移除例如对象1之后指向位置2,因为对象3向左“移动”了一个位置。这样的事情是可以实现的还是我应该尝试一种不同的方法?我刚开始学习C++所以我对任何高级概念都不是很熟悉。
如前所述,您应该将std::shared_ptr与std::weak_ptr一起使用。下面是用现代方法重写的代码:
#include <iostream>
#include <memory>
#include <vector>
class test {
public:
int n;
test(int n) : n(n) {}
};
int main() {
std::vector<std::shared_ptr<test>> v;
std::shared_ptr one = std::make_shared<test>(1);
std::shared_ptr two = std::make_shared<test>(2);
v.push_back(one);
v.push_back(two);
std::weak_ptr<test> p1 = one;
std::weak_ptr<test> p2 = v[0];
// prints 1 two times
if (auto sp = p1.lock()) {
std::cout << sp->n << std::endl;
}
if (auto sp = p2.lock()) {
std::cout << sp->n << std::endl;
}
// delete all references to one
v.erase(v.begin());
one = nullptr;
// nothing gets printed
if (auto sp = p1.lock()) {
std::cout << sp->n << std::endl;
}
if (auto sp = p2.lock()) {
std::cout << sp->n << std::endl;
}
return 0;
}
https://coliru.stacked-crooked.com/A/00B2072BB8CD73AD
本文向大家介绍解析C++中指向对象的指针使用,包括了解析C++中指向对象的指针使用的使用技巧和注意事项,需要的朋友参考一下 C++指向对象的常指针 将指针变量声明为const型,这样指针值始终保持为其初值,不能改变。 如: 定义指向对象的常指针的一般形式为: 也可以在定义指针变量时使之初始化,如将上面第2, 3行合并为: 请注意,指向对象的常指针变量的值不能改变,即始终指向同一个对象,但可以改变其
但我想使用一个指针,而不是一个简单的变量。能给我点启示吗? 谢谢
问题内容: 我是Java菜鸟。我已经掌握了将C / C ++指针转换为Java引用的概念,并且进展相当顺利。 我打了一段有指针的代码(即* ptr)。我需要取消引用指针并更改其指向的指针的值(即 ptr =&newthing;) 在Java中这似乎要困难得多。是否有人对如何解决此问题有任何想法?快速谷歌搜索什么都没有。 这是C ++中的代码示例。我想在Java中获得类似的工作,但是ptr_to_p
在print语句中:(假设整数大小为4字节) 让arr的内存位置为1000 arr 1——给出1016(即下一行内存) 我理解了逻辑,但我无法理解编译器如何将 arr标识为“指向4整数数组的指针”,并且 即使在增量之前两者都指向相同的地址(1000)
C++ 类 & 对象 一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算符 ->,就像访问指向结构的指针一样。与所有的指针一样,您必须在使用指针之前,对指针进行初始化。 下面的实例有助于更好地理解指向类的指针的概念: #include <iostream> using namespace std; class Box { public:
假设有一个结构 我得到一个指向该结构的成员的指针,比如作为某个函数的参数: 如何获取指向包含对象的指针?最重要的是:在不违反标准中的某些规则的情况下,也就是说,我想要标准定义的行为,而不是未定义或实现定义的行为。 附带说明:我知道这规避了类型安全。