【发布时间】:2021-05-17 21:44:41
【问题描述】:
我正在学习 C++,在我所有的“实验”中,我都在尝试理解临时对象(右值)的生命周期。
我的问题是:
拥有一个包含 const char* 指针的对象,当我想使用以“const char*”作为参数的构造函数时会发生什么?通常临时对象会自动销毁,但是以这种方式创建的指针会发生什么?
我暂时不使用 std::string 或其他 c++11 类,因为我只是专注于理解右值。
以下示例:
class MyAwesomeClass {
private:
const char* data;
public:
MyAwesomeClass(const char* ptr) {
this->data = ptr;
}
MyAwesomeClass(MyAwesomeClass&& myAwesomeClassRVALUE) {
this->data = myAwesomeClassRVALUE.data;
myAwesomeClassRVALUE.data = nullptr;
}
~MyAwesomeClass() {
delete data;
}
};
int main() {
MyAwesomeClass s = "My Awesome Class' string data.";
return 0;
}
【问题讨论】:
-
您有两个不相关的问题。请选择一个并为它创建一个minimal reproducible example。
-
您仍然需要创建一个minimal reproducible example。您询问构造函数中发生的事情。保留构造函数,也许还有 1 个方法来显示您打算如何使用该类。剩下的代码必须走。
-
std::string* stringData;如果没有非常有说服力的理由,我会拒绝结构/类中的 CL,我可以发明的这些都不适用于这里。 -
与您的问题无关:
: public Object看起来您正在尝试模拟Java,其中所有类都从一个Object继承。那是怎么回事? -
如果您在其中使用的
std::string构造函数没有这样的保证,为什么您认为可以将复制构造函数实现为noexcept?另外,为什么要使stringData成为指针?这只会使内存管理复杂化。 (如果您希望副本引用相同的数据,请使用std::shared_ptr<std::string>()。)