我正在观看有关智能指针的视频(下面的vid链接),该视频标识了传统C ++指针的以下问题:
您无法分辨出谁拥有指针
Hebert继续给出以下示例:A类具有指向浮点数的指针,B类具有指向同一浮点数的指针。这两个指针中的哪个拥有指针?好吧,你不能告诉...不清楚...我们不知道删除指针是谁的工作...坏..令人费解..难以调试。
他在说什么鬼话?我们如何不知道哪个类拥有指针?如果指针是作为类A或B的实例的一部分创建的,那么它不是分别简单地是A-> myPointer和B-> myPointer吗?
Thx:^)基思
https://www.youtube.com/watch?v=Jc9n9BcYSj4
大约1:00
#include <iostream>
class A {
public: float * f_ptr;
};
class B {
public: float * f_ptr;
};
int main() {
float f=2.71;
A* a = new(A);
B* b = new(B);
a->f_ptr = &f;
b->f_ptr = &f;
std::cout << "a->f_ptr: " << *a->f_ptr << std::endl;
std::cout << "b->f_ptr: " << *b->f_ptr << std::endl;
delete a;
delete b;
std::cout << std::endl;
}
/************
OUTPUT
a->f_ptr: 2.71
b->f_ptr: 2.71
*/
以下帖子很好地说明了这种现象:http :
//ericlavesson.blogspot.com/2013/03/c-ownership-semantics.html
当他说某个类“拥有指针”时,这意味着该类负责清理指针所做的混乱。您可以有两个不同的类A和B,它们使用指向同一对象的指针。除非您是这些类的设计者,否则您将无法确定哪个对象最后应删除该对象并在该对象之后进行清理,例如,解锁一些资源。您无法通过使用一些内置的语言语义来弄清楚或设置它-您必须通过文档等方式告知它。如果设计不好,您可能会得到两个类,分别尝试在同一对象之后两次清理,或者根本不清理该对象。
从技术上讲,这是关于谁拥有指针所指向的内存,而不是关于指针本身,但是大多数人在谈论拥有指针时都提到了我上面描述的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句