C++ C++;删除构造函数中的对象?

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 确保完成

我想制作一个有一个字符串的类。但若字符串长度超过50个字符,我不想创建对象。我该怎么办

{
    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具体取决于您的用法/结构。如果您愿意,您可以在类中将其设置为静态函数,并隐藏/删除默认构造函数。这样您可以让其他用户使用该函数。