相关疑难解决方法(0)

构造函数中这个奇怪的冒号成员(":")语法是什么?

最近我见过如下例子:

#include <iostream>

class Foo {
public:
  int bar;
  Foo(int num): bar(num) {};
};

int main(void) {
  std::cout << Foo(42).bar << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这奇怪: bar(num)意味着什么?它似乎初始化成员变量,但我以前从未见过这种语法.它看起来像一个函数/构造函数调用,但对于一个int?对我没有任何意义.也许有人可以启发我.而且,顺便说一下,还有其他类似的深奥语言功能,你永远不会在一本普通的C++书中找到它吗?

c++ syntax constructor c++-faq ctor-initializer

325
推荐指数
11
解决办法
10万
查看次数

(不)在异常中使用std :: string

我一直在读,我不应该抛出std::string一些或其他类来分配内存.像这里或更重要的是这里的第3点- 不要嵌入std::string对象.

所以现在我正在尝试将boost :: exception插入到我的项目中,我看到了什么:很多字符串.

为什么不提升符合自己的建议?

如果我有不能硬编码的参数,比如在配置文件中安装,我怎样才能将它们放入异常中而不使用std::string

或者指南是否std::string使用std::string尽可能少的指南?我有点困惑......

我做了一些研究.如果我错了,请纠正我.


如果我理解正确,那就是关于抛出期间的分配以及分配的内存发生了什么.因此,如果我在构造函数中分配内存并且无法在异常的析构函数中释放内存,则内存会丢失,这将产生内存泄漏.但是在投掷之前分配它是可以的,所以异常是干净的.

我试过这个:

struct xexception {
  int *ttt[10];
  xexception() {
    ttt[0] = new int[0xfffffffL];
    ttt[1] = new int[0xfffffffL];
    ttt[2] = new int[0xfffffffL];
    ttt[3] = new int[0xfffffffL];
    ttt[4] = new int[0xfffffffL];
    ttt[5] = new int[0xfffffffL];
    ttt[6] = new int[0xfffffffL];
    ttt[7] = new int[0xfffffffL];
    ttt[8] = new int[0xfffffffL];
    ttt[9] = …
Run Code Online (Sandbox Code Playgroud)

c++ boost exception

25
推荐指数
2
解决办法
5282
查看次数

标签 统计

c++ ×2

boost ×1

c++-faq ×1

constructor ×1

ctor-initializer ×1

exception ×1

syntax ×1