相关疑难解决方法(0)

为什么我更喜欢使用成员初始化列表?

我偏向于使用我的构造函数的成员初始化列表......但我早就忘记了这背后的原因......

您是否在构造函数中使用成员初始化列表?如果是这样,为什么?如果没有,为什么不呢?

c++ oop object-construction

212
推荐指数
6
解决办法
13万
查看次数

在构造函数初始化列表中分配内存是否有任何问题?

我在我的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在使用它之前分配它是否安全使用或是否有一些特殊的初始化顺序我可能会犯规?

c++

20
推荐指数
2
解决办法
1万
查看次数

函数try块的目的是什么?

可能重复:
函数try块何时有用?
函数的try-catch语法之间的区别

此代码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)

c++ exception-handling exception function-try-block

9
推荐指数
1
解决办法
2187
查看次数

函数try块,但不在构造函数中

只是一个简单的问题.两者之间有什么区别吗?

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)

如果不是,为什么函数尝试块(构造函数的初始化列表的情况被放在一边)?如果复制构造函数Foox传递给异常时抛出异常会发生什么f

c++ exception-handling

8
推荐指数
2
解决办法
2470
查看次数