【发布时间】:2020-10-03 06:23:27
【问题描述】:
简单程序写成:
#include <iostream>
#include <vector>
using std::vector;
class Test {
public:
Test( int d ) : data(d), addr(&data) {
}
// Test( Test &src ) : data(src.data), addr(src.addr) { }
const int data;
const int *addr;
~Test() {
delete addr;
}
void print() {
std::cout << " Data is : " << data << '\n';
}
};
int main( int, char**, char** ) {
std::vector<Test> data1;
data1.emplace_back( 98 );
for( auto a : data1 )
a.print();
std::cout << "main";
std::cout << std::endl;
return 0;
}
【问题讨论】:
-
delete addr;两次?一定是笔误。无论如何,您应该只在newed 的指针上调用delete。 -
addr不是从new返回的指针。将其传递给delete具有未定义的行为。为什么你认为你需要delete任何东西? (delete不是为了摆脱指针,而是为了摆脱指针指向的内容,并且仅如果该东西是在免费商店中使用new创建的。) -
哦!那是我出错的地方。是的,我假设当调用默认构造函数时,它会动态分配地址。反正现在已经解决了。
标签: c++ vector c++17 destructor dynamic-memory-allocation