c++ - 以下结构定义是什么意思?

标签 c++ struct

<分区>

在代码的一些地方,我有一个 struct 定义,如下所示:

typedef struct tagNameOfStruct{
  //some methods and members
}T_NameOfStruct, * PT_NameOfStruct, FAR LPT_NameOfStruct;

typedef struct tagNameOfStructLists{
  //some methods and members
}T_NameOfStructLists, * PT_NameOfStructLists, FAR LPT_NameOfStructLists;
 typedef pair<T_NameOfStruct, T_NameOfStructLists> CStructPair;
 typedef map<T_NameOfStruct, T_NameOfStructLists> CStructMap;

然后我在一个循环中的方法中看到以下代码行

T_NameOfStruct instance;
T_NameOfStructLists listInstance;
m_MapInstance.insert(CStructPair(instance, listInstance));
//structMapInstance is a members of method class of type CStructMap

该实例被插入到函数范围之外使用的数据结构中。它通过引用传递给数据结构。

  1. 当我们离开函数作用域时,实例不应该死掉吗?
  2. 结构定义的最后一行是什么意思?

编辑----为什么这不是重复的,请重新打开----: 结构定义中的 * PT_NameOfStruct、FAR LPT_NameOfStruct 也与你们链接的问题不同。还存在在方法堆栈上定义时通过 ref 传递实例的问题。奇怪的是代码有效,所以我想知道我在这里遗漏了什么。为什么我在尝试访问遍历数据结构的不同函数中的已销毁对象时没有出现异常。 仍然认为它是重复的?

最佳答案

Shouldn't instance die when we leave the function scope?

是的。如果您没有向我们展示的代码在那之后实际上使用了对它的引用,那么它就是错误的。但由于我们看不到它,我们只能猜测它是否这样做。

更新:现在您已经向我们展示了实际发生的情况,它被传递给 map::insert,它存储其参数的拷贝(即使它需要通过引用论证)。当 instance 本身被销毁时没有问题,假设它具有有效的复制语义。

What does the ending of the struct definition mean?

它声明:

  • 一个名为 tagNameOfStruct 的类。
  • 类类型的别名,称为 T_NameOfStruct。在 C++ 中,这是完全没有意义的;在 C 中,有些人有这样做的坏习惯,以避免在指定类型时键入 struct
  • 指向类型的指针的别名,称为 PT_NameOfStruct。这是一个比第一个 typedef 更糟糕的想法,因为它隐藏了某些东西是指针的重要信息。
  • 指向该类型的过时“远”指针的别名,称为 LPT_NameOfStruct。这是 16 位平台的后遗症;在现代平台上,它将与常规指针类型相同。

不要将其用作如何声明类类型的模型。最好保持简单:

class NameOfStruct {  // or "struct", if you want members to be public by default
    // members
};

NameOfStruct instance;  // No need for a typedef
NameOfStruct * pointer; // Make it clear that it's a pointer

关于c++ - 以下结构定义是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22321525/

相关文章:

c++ - 优先级队列和结构

c++ - 访问违规写入位置,在我的循环中

c++ - 我如何使用谷歌测试框架测试 void 方法

c++ - 使用 C++ 更新只读对象的 map

c++ - 如何在 C++ 中制作结构类型数组

c++ - 如何递归调用以结构数组为参数的函数

c++ - boost::factory 和 std::function

c++ - 尽快破坏事物是不是过早的优化?

C:如何访问通过 typedef 结构定义的数组中的某些单元格?

python - 用 Python 打包数据