Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有一个习惯是坏习惯吗;删除“;多态对象的函数,如果它使代码更清晰?_C++_Memory Management_Polymorphism_Destructor - Fatal编程技术网

C++ 有一个习惯是坏习惯吗;删除“;多态对象的函数,如果它使代码更清晰?

C++ 有一个习惯是坏习惯吗;删除“;多态对象的函数,如果它使代码更清晰?,c++,memory-management,polymorphism,destructor,C++,Memory Management,Polymorphism,Destructor,下面是一个简单的例子,说明我所说的“多态对象”的具体含义: 有两种方法可以释放它(我可以像传递句柄一样传递指针,但我不喜欢使用指针作为句柄): 删除文件//调用多态析构函数 文件->关闭()//调用多态函数 第一种方法似乎更合适,因为这就是析构函数的用途,但我个人更喜欢第二种方法(我也习惯了,因为我使用过很多库来处理这种情况)。但是,如果我正在编写新代码,并且希望采用“正确”的方式,我应该选择哪种方式?正确的方式是使用资源句柄,如std::fstream。另外,您的关闭函数调用是否删除此项内部?

下面是一个简单的例子,说明我所说的“多态对象”的具体含义:

有两种方法可以释放它(我可以像传递句柄一样传递指针,但我不喜欢使用指针作为句柄):

  • 删除文件//调用多态析构函数
  • 文件->关闭()//调用多态函数

  • 第一种方法似乎更合适,因为这就是析构函数的用途,但我个人更喜欢第二种方法(我也习惯了,因为我使用过很多库来处理这种情况)。但是,如果我正在编写新代码,并且希望采用“正确”的方式,我应该选择哪种方式?

    正确的方式是使用资源句柄,如
    std::fstream
    。另外,您的
    关闭
    函数调用
    是否删除此项内部?它们都不是,因为那不是C++风格。使用RAII@Nawaz,但是某些类型需要是多态的。我可以使用智能指针,但只有当我使用虚拟析构函数。@ Trang:这是非常罕见的,除非你把C++当作java(就像很多大家伙,比如谷歌)。我所说的是一条一般规则,你可以适用于90%的情况。@Nawaz就像我说的,这只是一个例子。除非需要在运行时更改类的实现,否则我不会使用PImpl,这主要是因为它会影响缓存性能。
    
    IFile *file = filesystem->open("myfile.txt");