C++ C++;删除构造函数中的对象?
我想制作一个有一个字符串的类。但若字符串长度超过50个字符,我不想创建对象。我该怎么办C++ C++;删除构造函数中的对象?,c++,string,object,constructor,question-answering,C++,String,Object,Constructor,Question Answering,我想制作一个有一个字符串的类。但若字符串长度超过50个字符,我不想创建对象。我该怎么办 { if (paSlovo.length() <= DLZKA_SLOVA) aSlovo = paSlovo; else delete this; } ``` { 如果(paSlovo.length(),而不是通过构造函数执行此操作,您可以使用一个函数来执行此操作,如果满足条件,该函数将为您提供对象,或者您将获得一个null ptr 确保完成
{
if (paSlovo.length() <= DLZKA_SLOVA)
aSlovo = paSlovo;
else
delete this;
} ```
{
如果(paSlovo.length(),而不是通过构造函数执行此操作,您可以使用一个函数来执行此操作,如果满足条件,该函数将为您提供对象,或者您将获得一个null ptr
确保完成后正确删除对象或使用智能PTR
//create object
bar* TryCreateMyObj(string const& paSlovo) const
{
//only create object if string is less than 50
if (paSlovo.length() <= DLZKA_SLOVA)
{
return new bar();
}
return nullptr
}
//创建对象
bar*TryCreateMyObj(字符串常量和paSlovo)常量
{
//仅当字符串小于50时创建对象
if(paSlovo.length()中止构造函数的唯一方法是从构造函数中抛出异常。这真的是类的属性还是使用场景的属性?在这种情况下,您应该在尝试创建对象之前进行检查。对于构造函数,您始终可以抛出异常。在构造函数中删除此属性将导致使用对象(其构造已结束)具有未定义的行为。改为抛出一个异常-对调用方的净影响是该对象从未存在。最好将该函数更改为发出一个std::unique\u ptr
std::optonal
是返回类型的另一个好选项。@πάνταῥεῖ 您是否建议将此函数设置为返回类型的类级函数(即静态条::
)或者是请求对象的方法,或者是一个全局非方法函数?@Vroomfondelshrug@Vroomfondel具体取决于您的用法/结构。如果您愿意,您可以在类中将其设置为静态函数,并隐藏/删除默认构造函数。这样您可以让其他用户使用该函数。