我偏向于使用我的构造函数的成员初始化列表......但我早就忘记了这背后的原因......
您是否在构造函数中使用成员初始化列表?如果是这样,为什么?如果没有,为什么不呢?
我在我的C++程序中使用了很多初始化列表但是没有意识到你可以在其中分配内存.
所以你可以这样做(作为一个人为的例子):
class Test
{
private:
int* i;
int* j;
int count;
int* k;
public:
Test(void) : i(new int), j(new int[10]), count(10), k(new int[count])
{
}
~Test(void)
{
delete i;
delete [] j;
delete [] k;
}
};
Run Code Online (Sandbox Code Playgroud)
以这种方式进行内存分配是否有任何问题?关于初始化的顺序,在同一列表中初始化的参数初始化参数是否安全?即我count在使用它之前分配它是否安全使用或是否有一些特殊的初始化顺序我可能会犯规?
此代码int在构造Dog类中的对象时抛出异常UseResources.该int异常由正常捕获try-catch块和代码输出:
Cat()
Dog()
~Cat()
Inside handler
Run Code Online (Sandbox Code Playgroud)
#include <iostream>
using namespace std;
class Cat
{
public:
Cat() { cout << "Cat()" << endl; }
~Cat() { cout << "~Cat()" << endl; }
};
class Dog
{
public:
Dog() { cout << "Dog()" << endl; throw 1; }
~Dog() { cout << "~Dog()" << endl; }
};
class UseResources
{
class Cat cat;
class Dog dog;
public:
UseResources() : …Run Code Online (Sandbox Code Playgroud) 只是一个简单的问题.两者之间有什么区别吗?
void f(Foo x) try
{
...
}
catch(exception& e)
{
...
}
Run Code Online (Sandbox Code Playgroud)
和
void f(Foo x)
{
try { ... }
catch (exception& e)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
?
如果不是,为什么函数尝试块(构造函数的初始化列表的情况被放在一边)?如果复制构造函数Foo在x传递给异常时抛出异常会发生什么f?