C++析构函数造成的错误

为什么有时候使用析构函数会让运行时间增加且系统返回值不为0?

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

class password{
    private:
        int N;
        char *b;
    public:
        password(int _n,char* _b){
            N=_n;
            b=_b;
        }
        
        ~password(){
            delete []b;
        }
        
        void cal(){
            int i=0;
            while(isalpha(b[i])){
                b[i]=(b[i]-'a'+N)%26+'a';
                i++;
            }
            i=0;
            while(b[i])cout<<b[i++];
        }
};


int main(){
    int n;
    char a[1000000];
    cin>>n;cin>>a;
    password P(n,a);
    P.cal();
    return 0;
}

析构函数的主要作用是在类对象被销毁时,释放对象在堆栈上分配的资源。如果没有适当释放这些资源,可能会导致内存泄漏等问题。因此,使用析构函数是一种良好的编程习惯,也是C++语言的特点之一。

然而,如果类的析构函数的实现过于复杂或者释放的资源过多,就可能导致程序运行时间增加,甚至影响程序性能。此外,在程序中调用析构函数不会显式返回任何值,而是隐式地返回void类型。因此,如果函数的返回值不为0,可能是由其他原因造成的,而不是析构函数调用导致的。

总之,析构函数是一个重要的概念,但是在具体应用时需要考虑平衡资源的释放和程序性能,避免出现不必要的问题。