char* cc = "Something string like";
char* ccn = new char[2];
ccn[0] = 'a';
ccn[1] = '\0';
cout << cc;
第二个指针,为了防止内存泄漏,应该是delete[]
'但是如何检测指针是否实际指向新的内存(如第一行中的那个)?第一个字符串在哪里创建?
答案 0 :(得分:8)
不,您不能,并且您不应该以期望您能够这样做的方式设计您的应用程序。关于创建第一个字符串的位置的问题 - 答案是“适合编译器的地方” - 它没有被C ++标准指定。
解决这个问题的明显方法是不使用char数组,而是使用std :: strings。
答案 1 :(得分:0)
在标准C ++中,无法单独从原始指针了解相关资源(如果有)的分配方式。
您可以使用智能指针,因为它们会传递资源所有权信息以及原始指针值。例如:
template <typename T>
struct noop_deleter {
void operator()(T *p) {}
};
boost::shared_array<const char> cc("Something string like", noop_deleter<char>());
boost::shared_array<char> ccn(new char[2]);
ccn[0] = 'a';
ccn[1] = 0;
cout << cc.get();