C++ - 何时使用指向类数据成员的指针?

标签 c++

我一直在用 C++ 编写代码,我想知道是否有人可以帮助我解决我们有时需要指向类成员而有时不需要的一般原因。

例如,如果我们正在编写一个二叉树

我把它实现为

class BinaryTree{

    BinaryTree * left;
    BinaryTree * right;
    int val;

    public:
        BinaryTree(int v) {left = NULL; right = NULL; val = v;}
        //implementation of any other neccessary functions
};

我使用指向左右的 BinaryTree 指针,因为没有指针我们无法做到这一点,因为 BinaryTree 在那个时间点不存在。

还有其他原因吗?有什么办法吗?

此外,如果我们放置指针成员函数,隐式析构函数会处理它们的删除吗?

感谢您的宝贵时间。

最佳答案

这是一个盒子:

A box, representing a struct here

它的体积大约是一立方米,所以它只能存放总体积为一立方米的元素。而且它绝对不能存放两个和自己一模一样的盒子。请注意,这两个盒子中的每一个都需要包含两个类似的盒子,依此类推。

这是一个结构:

struct BinaryTree {
    BinaryTree left;
    BinaryTree right;
    int val;
};

它的大小有限等于 sizeof(BinaryTree),因此它只能存储总大小小于或等于 sizeof(BinaryTree) 的对象。而且它绝对不能存储两个BinaryTree 类型的值。请注意,这两个值中的每一个都需要存储两个类似的值,依此类推。

由于struct实例不能包含同一个struct的其他实例,我们需要定义它们之间的关系,而树肯定是有层次的,所以我们这里使用指针。

请注意,所谓的指向 T 的原始指针(即 T*)所做的唯一事情就是指向 T。由于指向是此类指针的唯一任务,析构不会销毁指向的对象,只会销毁指针

有些类型的行为类似于指针,但也可以执行其他任务,例如管理指向对象的生命周期。它们是 C++11 的 std::unique_ptrstd::shared_ptr,以及许多其他的。我强烈推荐使用它们。

关于C++ - 何时使用指向类数据成员的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21689427/

相关文章:

C++ - 派生类中的重载运算符不起作用

c++ - 将 C++11 代码转换为 C++98

c# - 如何找到所有不同的组合作为字符串字符的不同长度的单位

c++ - 如何模拟已经编译到库中的类?

c++ - 64位和32位无符号整数双向映射的高效实现

c++ - IRC客户端发送消息不当,C++

C++ : Using an Enum type as a parameter

c++ - 如何在 CUDA 网格中的所有线程之间共享的 __global__ 内核中定义变量

c++ - 在 C++ 中返回 true 或 false

C++ Gmock - 使用 shared_ptr <FactoryClass> 的测试函数